我有一个带有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);


在两个表中的namehostname中的服务器名称可能是完全限定的,也可能不是完全限定的。
例如,sa77的值可以为sa77.abc.comsa77.cdesa77。服务器可以具有多个域值

sa77.abc.com匹配sa77sa77.abc我基本上需要比较值sa77

最佳答案

我通常使用left joinwhere is null来执行此操作,如下所示:

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


(编辑,因为您希望来自table2的记录不在table1中,而不是相反)。

10-04 15:55