1

我有 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 的行。在这种情况下,选择必须显示表中的第 3 行和第 4 行。

谢谢。

4

5 回答 5

8

试试这个

Select * from Table1
   Except
     Select * from Table2
于 2013-01-02T21:06:29.267 回答
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

于 2013-01-02T21:06:48.313 回答
1

像这样:

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

谓词不在小提琴演示中

或者:使用LEFT JOIN这样的:

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

左加入小提琴演示

于 2013-01-02T21:05:40.657 回答
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
于 2013-01-02T21:07:44.883 回答
1

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

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

演示

于 2013-01-02T21:08:09.947 回答