如何在两个表中提取非重复值

时间:2013-08-22 16:07:57

标签: sql sql-server sql-server-2008

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

我写了这个查询:

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

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

4 个答案:

答案 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