12

为简化起见,我有两个使用外键与一对多相关的表,例如:

Users table:
id
name

Actions table:
id
user_id

一个用户可能有很多动作,也可能没有。我需要一个 sql select 来返回在操作表中没有 user_id 值的用户 ID。

Users Table:
id      name
1       John
2       Smith
3       Alice

Actions Table:
id      user_id
1       3
2       1

所以我需要一个返回用户 id 2 (Smith) 的 sql 查询,因为外键值不包括 id 2

我尝试了以下 SQL,但它返回所有用户 ID:

SELECT users.id from users left join actions on actions.user_id is null
4

3 回答 3

18
select u.id
from users u
left outer join actions a on a.user_id = u.id
where a.user_id is null
于 2012-10-28T11:55:01.697 回答
3

优化后的版本是:

SELECT u.id
FROM users u
LEFT JOIN actions a
ON a.user_id = u.id
AND ISNULL(a.user_id)
于 2012-10-28T12:00:35.290 回答
2
SELECT u.id
FROM users u
LEFT JOIN actions a
   ON a.user_id = u.id
WHERE a.user_id IS NULL
于 2012-10-28T11:55:49.207 回答