仅选择第二个表中不存在的记录

时间:2017-12-18 20:42:02

标签: mysql sql join left-join inner-join

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

我想从table2中选择table1中不存在的记录

select * 
from table2 
where name NOT IN (select hostname from table1);

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

怎么样:

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

但是你需要更多地解释一下你需要匹配的案例。