IT

MySQL에 대한 SQL LEFT-JOIN 2개 필드

itgroup 2023. 9. 5. 20:09
반응형

MySQL에 대한 SQL LEFT-JOIN 2개 필드

나는 견해가 있습니다.A그리고 전망B.

A나는 몇몇 시스템에 대한 많은 정보를 가지고 있다, 예를 들면,IP그리고.port내가 다 보존하고 싶은.B추가하고 싶은 정보가 하나 있습니다.A.

두 뷰 사이의 일치 필드는 다음과 같습니다.IP그리고.Port따라서 두 보기 모두에서 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 솔루션으로 쿼리를 조정할 수 없습니다.

감 잡히는 게 없어요?

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

다음과 같은 방법을 시도해 보겠습니다.

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 /*if you has to filter by columns from right table , then add this condition in ON clause*/
where a.somecolumn = somevalue /*if you have to filter by some column from left table, then add it to where condition*/

그래서.where다음과 같은 방법으로만 오른쪽 테이블에서 열로 설정한 결과를 필터링할 수 있습니다.

...
where b.somecolumn <> (=) null

언급URL : https://stackoverflow.com/questions/18914698/sql-left-join-on-2-fields-for-mysql

반응형