我有一个球队桌子和一个球员桌子,我想找到所有没有球员的球队。玩家表通过team_id
列关联。我正在使用Ruby on Rails,所以我有一个Team和一个Player模型。
答案 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)
您通常应该能够从父级到子级进行外部联接,并检查子级中不可归零的字段中的空值。这通常比“不在”或“不存在”更快。这可能不适用于所有数据库。