복붙노트

[SQL] 관련된 사람없이 모든 레코드 찾기

SQL

관련된 사람없이 모든 레코드 찾기

나는 팀 테이블과 플레이어 테이블을 가지고 있고 나는 그와 관련된 선수가없는 모든 팀을 찾을 수 꿔. 선수 테이블은 team_id 칼럼을 통해 연결되어 있습니다. 나는 팀과 플레이어의 모델을 가지고, 그래서 나는이에 대한 레일에 루비를 사용하고 있습니다.

해결법

  1. ==============================

    1.그것은 왼쪽에 참여하고 더 잘 수행 할 수 있습니다 :

    그것은 왼쪽에 참여하고 더 잘 수행 할 수 있습니다 :

    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. ==============================

    2.이 같은:

    이 같은:

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

    3.당신은 너무 같은 NOT EXISTS 조건으로 그렇게 할 것입니다 :

    당신은 너무 같은 NOT EXISTS 조건으로 그렇게 할 것입니다 :

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

    4.당신은 일반적으로 외부 널 수없는 아이의 필드에 널 (null) 값에 대해 자녀와 체크에 부모로부터 가입 할 수 있어야합니다. 이것은 빨리 '없는 존재' 'NOT IN'또는보다 일반적이다. 이 모든 데이터베이스에서 작동하지 않을 수 있습니다.

    당신은 일반적으로 외부 널 수없는 아이의 필드에 널 (null) 값에 대해 자녀와 체크에 부모로부터 가입 할 수 있어야합니다. 이것은 빨리 '없는 존재' 'NOT IN'또는보다 일반적이다. 이 모든 데이터베이스에서 작동하지 않을 수 있습니다.

  5. from https://stackoverflow.com/questions/1314408/finding-all-records-without-associated-ones by cc-by-sa and MIT license