代码之家  ›  专栏  ›  技术社区  ›  Ryan Bigg Andrés Bonilla

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

  •  11
  • Ryan Bigg Andrés Bonilla  · 技术社区  · 17 年前

    我有一张球队表和一张球员表,我想找到所有没有球员的球队。玩家表通过 team_id 列。我在使用RubyonRails,所以我有一个团队和一个玩家模型。

    4 回复  |  直到 8 年前
        1
  •  17
  •   Ryan Bigg Andrés Bonilla    15 年前

    执行左联接可能会更好:

    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')
    
        2
  •  4
  •   Alter Lagos Hiery Nomus    8 年前

    像这样:

    select * from teams
    where id not in (select distinct team_id from players)
    
        3
  •  1
  •   VoteyDisciple    17 年前

    你可以用一个 NOT EXISTS 情况如下:

    SELECT *
    FROM teams
    WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)
    
        4
  •  1
  •   Nerdfest    17 年前

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