我有两个表,每个表都包含带有数字的列。我需要比较两个表中的列并提取第一个表中确实存在而第二个表中不存在的数字。我不需要独特的价值。
我写了这个查询:
SELECT Table1.Numbers, Table1.Name
FROM Table1, Table2
WHERE Table1.Numbers != Table2.numbers
由于我正在处理数百万条记录,有人可以推荐更有效的查询,从而为我提供相同的结果吗?
我有两个表,每个表都包含带有数字的列。我需要比较两个表中的列并提取第一个表中确实存在而第二个表中不存在的数字。我不需要独特的价值。
我写了这个查询:
SELECT Table1.Numbers, Table1.Name
FROM Table1, Table2
WHERE Table1.Numbers != Table2.numbers
由于我正在处理数百万条记录,有人可以推荐更有效的查询,从而为我提供相同的结果吗?
我会使用NOT EXISTS
:
SELECT Table1.Numbers, Table1.Name
FROM Table1
WHERE NOT EXISTS(
SELECT 1 FROM Table2
WHERE Table1.Numbers=Table2.Numbers
)
其他方法:
我应该使用 NOT IN、OUTER APPLY、LEFT OUTER JOIN、EXCEPT 还是 NOT EXISTS?
您可以通过检查表 2 中数字的存在来轻松完成此操作。
SELECT T1.Numbers
,T1.Name
FROM Table1 T1
WHERE NOT EXISTS (SELECT 1 FROM Table2 T2 WHERE T2.Numbers = T1.Numbers)
试试这个(假设您的 Numbers 列不可为空)
SELECT T1.Numbers, T1.Name
FROM Table1 AS T1
LEFT JOIN Table2 AS T2 ON T1.Numbers = T2.Numbers
WHERE T2.Numbers IS NULL;
SELECT
Table1.Numbers, Table1.Name
FROM
Table1, Table2
GROUP BY
Table1, Table2
HAVING
COUNT(*) > 1