1. ホーム
  2. mysql

[解決済み] SQL LEFT-JOIN (2フィールド) for MySQL

2022-03-10 20:15:54

質問

ビューがあります A とビュー B .

A のように、いくつかのシステムに関する情報を持っています。 IPport を、すべて保存しておきたい。で B で追加したい情報が1つだけあります。 A .

2つのビューの間で一致するフィールドは IPPort . したがって、私は両方のビューで同じIPとポートを持つこれらのホストを一致させる必要があります。

Aを見る。

IP | OS     | Hostname | Port | Protocol
1  | Win    | hostONE  | 80   | tcp 
1  | Win    | hostONE  | 443  | tcp 
1  | Win    | hostONE  | 8080 | tcp 
2  | Linux  | hostTWO  | 21   | tcp
2  | Linux  | hostTWO  | 80   | tcp
3  | Linux  | hostTR   | 22   | tcp

Bを見る

IP | Port | State
1  | 443  | Open
2  | 80   | Closed

OUTPUT

IP | OS     | Hostname | Port | Protocol | State
1  | Win    | hostONE  | 80   | tcp      |
1  | Win    | hostONE  | 443  | tcp      | Open
1  | Win    | hostONE  | 8080 | tcp      |
2  | Linux  | hostTWO  | 21   | tcp      | Closed
2  | Linux  | hostTWO  | 80   | tcp      |
3  | Linux  | hostTR   | 22   | tcp      |

注:ビューAのホストの中には、ビューBにIP/ポート関連の項目がないものがある可能性があります。

また、ビューAのホストの中には、ビューBと一致するものがある可能性があります。

ビューAのすべてのエントリとビューBの正しい関連エントリを持つために、LEFT JOINを使用する必要があると思ったのですが、うまくいきませんでした。 私は正しいWHERE句とJOINソリューションでクエリを調整することができません。

何か思い当たることはありますか?

解決方法は?

select a.ip, a.os, a.hostname, a.port, a.protocol,
       b.state
from a
left join b on a.ip = b.ip 
           and a.port = b.port