【发布时间】:2011-01-31 23:54:37
【问题描述】:
假设我有两个表,它们都有用户 ID。我想执行一个操作来返回表 1 中所有不在表 2 中的用户 ID。我知道必须有一些简单的方法来做到这一点 - 谁能提供一些帮助?
【问题讨论】:
-
您使用的是什么数据库平台?
标签: sql database relational-algebra
假设我有两个表,它们都有用户 ID。我想执行一个操作来返回表 1 中所有不在表 2 中的用户 ID。我知道必须有一些简单的方法来做到这一点 - 谁能提供一些帮助?
【问题讨论】:
标签: sql database relational-algebra
它很慢,但您通常可以使用“不在”之类的内容来完成此操作。 (各种 RDBMS 系统中还有其他功能可以更好地做到这一点,例如 Oracle 有一个 'exists' 子句可以用于此。
但你可以说:
select id from table1 where id not in (select id from table2)
【讨论】:
有几种方法可以做到这一点。这是使用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
最快的方法取决于数据库。
【讨论】:
如果您的 TSQL 方言支持,一种方法是使用EXCEPT。相当于进行左连接和空测试
【讨论】:
SELECT user_id FROM table1 LEFT JOIN table2 ON table1.user_id = table2.user_id WHERE table2.user_id IS NULL;
【讨论】:
如果是 SQL 服务器:
SELECT id FROM table1
EXCEPT
SELECT id FROM table2
甲骨文:
SELECT id FROM table1
MINUS
SELECT id FROM table2
休息:不确定....
【讨论】:
试试这个:
SELECT id FROM table1 WHERE id NOT IN
(
SELECT id FROM table2
)
【讨论】:
select ID from table1
where ID not in (select ID from table2)
【讨论】: