假设我有两个表,它们都有用户ID。我想执行一个操作,它将返回表1中不在表2中的所有用户IDS。我知道必须有一些简单的方法来执行此操作 - 任何人都可以提供一些帮助吗?
答案 0 :(得分:6)
它很慢,但你通常可以用'不在'之类的东西来实现这一点。 (各种RDBMS系统中还有其他功能以更好的方式执行此操作,例如,Oracle具有可用于此的“exists”子句。
但你可以说:
select id from table1 where id not in (select id from table2)
答案 1 :(得分: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
最快的方法取决于数据库。
答案 2 :(得分:1)
如果您的TSQL方言支持,则一种方法是使用EXCEPT。它相当于执行左连接和空测试
答案 3 :(得分:1)
SELECT user_id FROM table1 LEFT JOIN table2 ON table1.user_id = table2.user_id WHERE table2.user_id IS NULL;
答案 4 :(得分:1)
如果是的话 SQL Server:
SELECT id FROM table1
EXCEPT
SELECT id FROM table2
甲骨文:
SELECT id FROM table1
MINUS
SELECT id FROM table2
休息:我不确定......
答案 5 :(得分:0)
试试这个:
SELECT id FROM table1 WHERE id NOT IN
(
SELECT id FROM table2
)
答案 6 :(得分:0)
select ID from table1
where ID not in (select ID from table2)