回答

收藏

在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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则