32

私にはビューAとビューがありますB

には、すべてを保存したいシステムなど、Aいくつかのシステムに関する多くの情報があります。にに追加したい情報が 1 つだけあります。IPportBA

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

出力

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 ソリューションを使用してクエリを調整できません。

何か案が?

4

2 に答える 2

73
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
于 2013-09-20T10:40:34.647 に答える