выбирая только записи, которых нет во второй таблице

0

У меня есть таблица 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

Теги:
join
inner-join
left-join

2 ответа

1

Обычно я делаю это, используя left join а where is null, например:

select * 
from table2
left join table1 on table2.name=table1.hostname
where table1.hostname is null;

(отредактируйте, потому что вам нужны записи из таблицы2, а не в таблице1, а не наоборот).

  • 1
    Это действительно должен быть самый эффективный способ, так как из этого объясненияxtended.com/ 2009/09/18/…
  • 0
    Согласовано - это дает правильные результаты и является более эффективным, чем использование CONCAT, как предлагается в других примерах.
0

как насчет:

where name NOT IN (select hostname from table1)
  and CONCAT(name, '.com') NOT IN (select hostname from table1);

Но вам нужно больше объяснить, какие случаи вам нужно сопоставить.

  • 0
    я отредактировал свой вопрос Имя сервера в пределах имени или имени хоста в любой из 2 таблиц может или не может быть полностью определено

Ещё вопросы

Сообщество Overcoder
Наверх
Меню