在MySQL的2个字段上进行SQL LEFT-JOIN
技术问答
227 人阅读
|
0 人回复
|
2023-09-14
|
我有A一个观点B。0 a) @2 j9 A, b8 s8 k. s0 w' A" U
在A我有很多的信息的一些系统,如IP和port我要保存所有。在中B,我只想添加一个信息A。1 G8 r: |5 W* P3 ~" G3 J. L3 r. j
这两个视图之间的匹配字段是IP和Port。因此,我必须在两个视图中匹配具有相同IP和端口的那些主机。% I0 u, c( ^- j6 r; }
例子: p! H9 _% {4 W4 y
查看A:6 b3 g6 D6 ]/ n1 u r
IP | OS | Hostname | Port | Protocol
+ n, @% t, V, v4 p# u$ ?1 | Win | hostONE | 80 | tcp
! z6 [! Y0 k T1 c: L1 | Win | hostONE | 443 | tcp
- }" ?; i: Y, U3 H1 | Win | hostONE | 8080 | tcp 8 ^, z. X) }8 z+ E+ h" Q1 t
2 | Linux | hostTWO | 21 | tcp
q5 l7 T* l, N% u+ S' u. o2 | Linux | hostTWO | 80 | tcp0 t7 a& | h7 X, ?
3 | Linux | hostTR | 22 | tcp9 [* _0 x) n: x+ Z" ]
查看B:1 b4 e5 p' n$ [# K! b! g5 |5 \
IP | Port | State
8 K9 r9 N( i, }7 {: M6 I: ]" P1 | 443 | Open7 O: a# T9 c: h2 |/ i" n) f
2 | 80 | Closed
$ o# q9 o4 `5 a r" H' P输出8 @9 ^! a( N5 B5 X$ i
IP | OS | Hostname | Port | Protocol | State- Z* r% e" S& A s5 s
1 | Win | hostONE | 80 | tcp |
2 C9 c# S2 \! f1 {1 | Win | hostONE | 443 | tcp | Open* e) ?' {. f: A4 r0 f3 b7 V. ~
1 | Win | hostONE | 8080 | tcp |& |$ k2 U' t j# t
2 | Linux | hostTWO | 21 | tcp | Closed
' ^# _! Z l6 o2 | Linux | hostTWO | 80 | tcp |6 j4 S. {$ c/ R; y" F
3 | Linux | hostTR | 22 | tcp |! q( K; v# k" z" d* a- h: L' m
注意:视图A的某些主机可能在视图B中没有与IP /端口相关的项目。5 `& o& ` _4 Y( S5 q
视图A的某些主机也可能在视图B中具有某些匹配项。
' j0 x; p" F3 Q$ A: K+ k我以为我应该使用LEFT JOIN才能拥有View A的所有条目和View9 p0 h7 _4 g$ |+ S/ k0 _, p5 {
B的正确关联条目,但是没有用。我无法使用正确的WHERE子句和JOIN解决方案来调整查询。- S+ u& P. U$ f& z3 h4 a A
任何的想法?
# n Q. ]$ i6 X. x* E2 U! ~2 E: E( Z 1 y4 B0 ]" G7 B: }4 f% ?: r7 R
解决方案:1 Y+ F6 h4 R2 s2 s
5 ?; F1 j) F5 W- _% Q$ j
& g$ }7 W4 l* v9 f2 [' j
% N2 X' r- M! u A2 O select a.ip, a.os, a.hostname, a.port, a.protocol,3 b- ]& S y& u) h3 n# f
b.state9 W5 n4 l5 u( k# ~ W) _
from a; A7 G5 n R/ T" o7 s" X( N
left join b on a.ip = b.ip
$ ^. U2 q: @+ R% b and a.port = b.port |
|
|
|
|
|