У меня есть таблица mysql1 с hostname
и следующие значения:
HostName
-----
sa77.com
ca77cded.com
sa65yacd.com
ca65zededs.com
sa88y.com
sa99ujk8.com
У меня есть другая таблица2, которая имеет поле name
(переносит значения имени хоста).
Name
-----
sa77
ca77cded.com
sa65yacd
ca65zededs.com
Я хочу выбрать записи из таблицы2, которых нет в таблице1
select *
from table2
where name NOT IN (select hostname from table1);
Имя сервера в name
или hostname
в любой из двух таблиц может быть или не быть полностью квалифицированным. Например, sa77
может иметь значение as sa77.abc.com
или sa77.cde
или sa77
. Сервер может иметь несколько значений домена
sa77.abc.com
соответствует sa77
и sa77.abc
Мне в основном нужно сравнивать значение sa77
Обычно я делаю это, используя left join
а where is null
, например:
select *
from table2
left join table1 on table2.name=table1.hostname
where table1.hostname is null;
(отредактируйте, потому что вам нужны записи из таблицы2, а не в таблице1, а не наоборот).
как насчет:
where name NOT IN (select hostname from table1)
and CONCAT(name, '.com') NOT IN (select hostname from table1);
Но вам нужно больше объяснить, какие случаи вам нужно сопоставить.