查找没有关联记录的所有记录

时间:2009-08-21 22:01:20

标签: sql ruby-on-rails

我有一个球队桌子和一个球员桌子,我想找到所有没有球员的球队。玩家表通过team_id列关联。我正在使用Ruby on Rails,所以我有一个Team和一个Player模型。

4 个答案:

答案 0 :(得分:17)

执行左连接可能会更好:

SELECT
teams.*
FROM teams
LEFT JOIN players ON (teams.id = players.team_id)
WHERE
players.team_id IS NULL

或者使用ARel(感谢JasonKing的评论):

Team.includes(:players).where('players.team_id IS NULL')

答案 1 :(得分:4)

这样的事情:

select * from teams
where id not in (select distinct team_id from players)

答案 2 :(得分:1)

您可以使用NOT EXISTS条件执行此操作:

SELECT *
FROM teams
WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)

答案 3 :(得分:1)

您通常应该能够从父级到子级进行外部联接,并检查子级中不可归零的字段中的空值。这通常比“不在”或“不存在”更快。这可能不适用于所有数据库。