我有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行。
感谢。
答案 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)
答案 2 :(得分: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;
答案 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)