我有一个带有hostname
字段和以下值的mysql table1:
HostName
-----
sa77.com
ca77cded.com
sa65yacd.com
ca65zededs.com
sa88y.com
sa99ujk8.com
我有另一个table2,其中具有
name
字段(带有主机名值)。Name
-----
sa77
ca77cded.com
sa65yacd
ca65zededs.com
我想从表2中选择表1中不存在的记录
select *
from table2
where name NOT IN (select hostname from table1);
在两个表中的
name
或hostname
中的服务器名称可能是完全限定的,也可能不是完全限定的。例如,
sa77
的值可以为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;
(编辑,因为您希望来自table2的记录不在table1中,而不是相反)。