2012-10-28 68 views
7

为了简化起见,我必须使用外键与一个与许多两张表,例如:选择没有在其它表的外键主键

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 

所以我需要一个SQL查询,返回用户ID 2(史密斯),因为外键的值不包括ID 2

我尝试以下SQL,但是它返回所有用户的id :

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

回答

11
select u.id 
from users u 
left outer join actions a on a.user_id = u.id 
where a.user_id is null 
2
SELECT u.id 
FROM users u 
LEFT JOIN actions a 
    ON a.user_id = u.id 
WHERE a.user_id IS NULL 
+0

它没有返回任何结果。 – SaidbakR

+0

是的,在我的查询中有一个错字。 – bobwienholt

4

优化的版本是:

SELECT u.id 
FROM users u 
LEFT JOIN actions a 
ON a.user_id = u.id 
AND ISNULL(a.user_id) 
+0

它返回所有用户。 – SaidbakR

+0

你是对的我有一个错过类型正确的是:ON a.user_id = u.id – ChaosClown