我有两张表,相差约3000条记录
select count(name) from t1
返回1847073
select count(name) from t2
返回1813492
但是当我试图得到一个不在另一个中的结果时,我只得到空结果。
select t1.name from t1 where t1.name not in (select t2.name from t2);
我还尝试了一个左边的连接,左边有更多的记录,它只是永远运行
select t1.name from t1 left join t2 on t1.name = t2.name where t2.name is null
答案 0 :(得分:2)
您的表t1
可能有一些重复的名称,因此它的记录数比表t2
更多,但t1
中的所有名称仍然存在于t2
中。 1}}。
但是您还应该考虑这样一个事实,即表t1中的某些名称可能为NULL,并且由于NULL NOT IN (....)
将被评估为NULL,因此除非您添加显式条件,否则它们将不会显示:
OR t1.name IS NULL;
但是为了符合SQL标准,IN
/ NOT IN
不仅返回NULL
左侧的表达式为NULL,而且如果在list和列表中的一个表达式为NULL,您还需要从NOT IN子查询中排除NULL名称:
SELECT t1.name
FROM t1
WHERE
t1.name NOT IN (SELECT t2.name FROM t2 WHERE t2.name IS NOT NULL)
OR t1.name IS NULL;
您的第二个查询看起来很好,但您可能会错过两个表上名称列的索引。
答案 1 :(得分:0)
这有用吗?
SELECT t1.name
FROM table1 t1
NATURAL LEFT JOIN table2 t2
WHERE t2.name IS NULL