我有两个表,每个表都包含带数字的列。我需要比较两个表中的列并提取第一个表中存在的数字,而不是第二个表中存在的数字。我不需要独特的价值。
我写了这个查询:
SELECT Table1.Numbers, Table1.Name
FROM Table1, Table2
WHERE Table1.Numbers != Table2.numbers
由于我正在制作数百万条记录,有人可以推荐更有效的查询,这会为我提供相同的结果吗?
答案 0 :(得分:3)
我会使用NOT EXISTS
:
SELECT Table1.Numbers, Table1.Name
FROM Table1
WHERE NOT EXISTS(
SELECT 1 FROM Table2
WHERE Table1.Numbers=Table2.Numbers
)
其他方法:
Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?
答案 1 :(得分:2)
您可以通过检查表2中的数字是否存在来轻松完成此操作。
SELECT T1.Numbers
,T1.Name
FROM Table1 T1
WHERE NOT EXISTS (SELECT 1 FROM Table2 T2 WHERE T2.Numbers = T1.Numbers)
答案 2 :(得分:0)
尝试此操作(假设您的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;
答案 3 :(得分:0)
SELECT
Table1.Numbers, Table1.Name
FROM
Table1, Table2
GROUP BY
Table1, Table2
HAVING
COUNT(*) > 1