Подтвердить что ты не робот

SQL LEFT-JOIN для 2-х полей для MySQL

У меня есть вид 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

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 не имеют элементов, связанных с IP/Port, в представлении B.

Также возможно, что некоторые хосты представления A имеют некоторое совпадение в представлении B.

Я думал, что я должен использовать LEFT JOIN, чтобы иметь всю запись View A и правильную связанную запись View B, но она не сработала. Я не могу настроить запрос с помощью правильного предложения WHERE и решения JOIN.

Любая идея?

4b9b3361

Ответ 1

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

Ответ 2

Попробуйте этот способ:

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