1

我有两个表,每个表都包含带有数字的列。我需要比较两个表中的列并提取第一个表中确实存在而第二个表中不存在的数字。我不需要独特的价值。

我写了这个查询:

SELECT Table1.Numbers, Table1.Name
FROM Table1, Table2
WHERE Table1.Numbers != Table2.numbers

由于我正在处理数百万条记录,有人可以推荐更有效的查询,从而为我提供相同的结果吗?

4

4 回答 4

3

我会使用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?

于 2013-08-22T16:11:37.980 回答
2

您可以通过检查表 2 中数字的存在来轻松完成此操作。

SELECT  T1.Numbers
        ,T1.Name
FROM    Table1 T1
WHERE   NOT EXISTS (SELECT 1 FROM Table2 T2 WHERE T2.Numbers = T1.Numbers)
于 2013-08-22T16:10:43.070 回答
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;
于 2013-08-22T16:11:36.790 回答
0
SELECT
   Table1.Numbers, Table1.Name
FROM
    Table1, Table2
GROUP BY
    Table1, Table2
HAVING 
    COUNT(*) > 1
于 2013-08-22T16:14:21.847 回答