4

假设我有两个表,它们都有用户 ID。我想执行一个操作,返回表 1 中所有不在表 2 中的用户 ID。我知道必须有一些简单的方法来做到这一点 - 任何人都可以提供一些帮助吗?

4

7 回答 7

6

它很慢,但是您通常可以使用“不在”之类的东西来完成此操作。(各种 RDBMS 系统中还有其他功能可以以更好的方式执行此操作,例如 Oracle 有一个“exists”子句可用于此目的。

但你可以说:

select id from table1 where id not in (select id from table2)
于 2011-01-31T23:56:51.687 回答
5

有几种方法可以做到这一点。这是使用的一种方法NOT EXISTS

SELECT userid
FROM table1
WHERE NOT EXISTS
(
    SELECT *
    FROM table2
    WHERE table1.userid = table2.userid
)

这是使用连接的另一种方法:

SELECT table1.userid
FROM table1
LEFT JOIN table2
ON table1.userid = table2.userid
WHERE table2.userid IS NULL

最快的方法取决于数据库。

于 2011-01-31T23:57:05.963 回答
1

一种方法是使用EXCEPT,如果您的 TSQL 方言支持它。相当于执行左连接和空测试

于 2011-01-31T23:58:06.703 回答
1
SELECT user_id FROM table1 LEFT JOIN table2 ON table1.user_id = table2.user_id WHERE table2.user_id IS NULL;
于 2011-01-31T23:58:57.293 回答
1

如果是 SQL Server:

SELECT id FROM table1
EXCEPT 
SELECT id FROM table2

甲骨文:

SELECT id FROM table1
MINUS
SELECT id FROM table2

休息:不确定....

于 2011-02-01T00:00:02.333 回答
0

试试这个:

SELECT id FROM table1 WHERE id NOT IN
(
    SELECT id FROM table2
)
于 2011-01-31T23:57:04.380 回答
0
select ID from table1
where ID not in (select ID from table2)
于 2011-01-31T23:57:07.053 回答