[SQL] 관련된 사람없이 모든 레코드 찾기
SQL관련된 사람없이 모든 레코드 찾기
나는 팀 테이블과 플레이어 테이블을 가지고 있고 나는 그와 관련된 선수가없는 모든 팀을 찾을 수 꿔. 선수 테이블은 team_id 칼럼을 통해 연결되어 있습니다. 나는 팀과 플레이어의 모델을 가지고, 그래서 나는이에 대한 레일에 루비를 사용하고 있습니다.
해결법
-
==============================
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.이 같은:
이 같은:
select * from teams where id not in (select distinct team_id from players)
-
==============================
3.당신은 너무 같은 NOT EXISTS 조건으로 그렇게 할 것입니다 :
당신은 너무 같은 NOT EXISTS 조건으로 그렇게 할 것입니다 :
SELECT * FROM teams WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)
-
==============================
4.당신은 일반적으로 외부 널 수없는 아이의 필드에 널 (null) 값에 대해 자녀와 체크에 부모로부터 가입 할 수 있어야합니다. 이것은 빨리 '없는 존재' 'NOT IN'또는보다 일반적이다. 이 모든 데이터베이스에서 작동하지 않을 수 있습니다.
당신은 일반적으로 외부 널 수없는 아이의 필드에 널 (null) 값에 대해 자녀와 체크에 부모로부터 가입 할 수 있어야합니다. 이것은 빨리 '없는 존재' 'NOT IN'또는보다 일반적이다. 이 모든 데이터베이스에서 작동하지 않을 수 있습니다.
from https://stackoverflow.com/questions/1314408/finding-all-records-without-associated-ones by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 업데이트하고 한 쿼리에서 선택 (0) | 2020.07.08 |
---|---|
[SQL] 어떻게 오라클 11g에서 "선택"쿼리에서 오프셋 추가하려면? (0) | 2020.07.07 |
[SQL] LINQ에 SQL 순위 () 변환, 또는 대체 (0) | 2020.07.07 |
[SQL] 사용 *에 베스트 MySQL의 필드를 많이 호출 할 때? [복제] (0) | 2020.07.07 |
[SQL] MySQL은 "선택은 MAX_JOIN_SIZE 행보다 더 많은 검토 것" (0) | 2020.07.07 |