У меня есть таблица table1
с b_id
как PK
, ip
, host
В этой таблице разные хосты могут иметь один и тот же ipaddress. Здесь t2_id
является внешним ключом к id
table2
b_id ip host t2_id
9205 10.10.10.10 zero 1121
9206 10.10.10.10 hello.abc.com 1121
9207 10.10.10.10 hi.abc.com 1121
У меня есть другая таблица table2
id
как PK
, ip
, host
и b_id
Здесь b_id
- это b_id
ключ для table1
В моем проекте два имени хоста hi.abc.com
и hi
считаются одинаковыми, поскольку доменное имя abc.com
не рассматривается в сравнении, Итак, мне просто нужно сравнить hostname without domain name
id ip host b_id
1121 10.10.10.10 hi null
Я хочу отфильтровать строки из table1
которые имеют одинаковые значения ip
но host
отличается. Итак, мой вывод должен быть
b_id ip host t2_id
9205 10.10.10.10 zero 1121
9206 10.10.10.10 hello.abc.com 1121
Я написал следующий запрос, но он не дает правильного результата
select * from table1 T1 INNER JOIN table2 T2
ON T1.t2_id = T2.id
where T1.host not like T2.host;
Как насчет использования not exists
?
select t1.*
from table1 t1
where not exists (select 1
from table2 t2
where t2.ip = t1.ip and
substring_index(t2.host, '.', 1) = substring_index(t1.host, '.', 1)
) ;