在SQL中,如何执行“减法”操作?

时间:2011-01-31 23:54:37

标签: sql database relational-algebra

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

7 个答案:

答案 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)