SQL - 从2个表中选择不重复的行?

时间:2013-01-02 21:02:27

标签: sql

我有2张桌子(也许它们很糟糕)。

表1

id  |  word  |  user
1   |  a     |  me
2   |  b     |  dad
3   |  c     |  mom
4   |  d     |  sister

表2

id  |  word  |  user
1   |  a     |  me
2   |  b     |  dad

我想显示table1中的所有行,不包括table2中等于table1的行。在这种情况下,select必须显示表格中的第3行和第4行。

感谢。

5 个答案:

答案 0 :(得分:8)

试试这个

Select * from Table1
   Except
     Select * from Table2

答案 1 :(得分:4)

您没有指定RDBMS,但可以在所有数据库中使用NOT EXISTS

select *
from table1 t1
where not exists (select *
                  from table2 t2
                  where t1.word = t2.word
                    and t1.user = t2.user 
                    -- add other columns here for comparison including id)

请参阅SQL Fiddle with Demo

答案 2 :(得分:1)

像这样:

SELECT *
FROM Table1
WHERE id NOT IN(SELECT id FROM Table2);

Predicate NOT IN Fiddle Demo

或:使用LEFT JOIN,如此:

SELECT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE t2.id IS NULL;

LEFT JOIN Fiddle Demo

答案 3 :(得分:1)

由于您没有指定您正在使用的SQL风格,因此明智的做法是避开EXCEPTS并使用标准ANSI SQL。所以这是使用左外连接的情况。

SELECT t1.*  
FROM table1 AS t1  
    LEFT OUTER JOIN table2 AS t2  
        ON t1.word = t2.word
        AND t1.user = t2.user
WHERE t2.id IS NULL

答案 4 :(得分:1)

您可以使用EXCEPT(SQL-Server> = 2005)

SELECT id, word, user
FROM Table1
EXCEPT
SELECT id, word, user
FROM Table2;

DEMO