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

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

执行左连接可能会更好:

 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') 

像这样的东西:

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

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

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

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