2014-03-01 2 views
0

2 개의 테이블 t1과 t2와이 두 테이블을 연결하는 중간 테이블 t2_has_t1이 있습니다 (여러 개에서 여러 개까지).중간 테이블에 존재하지 않는 모두를 선택해야합니다.

(t2_has_t1을 통해) t2에 연결되지 않은 모든 t1을 선택하고 싶습니다. 중첩 된 선택을 할 수 있지만 더 효율적인 방법으로이 작업을 수행 할 수 있는지 궁금합니다.

이 피들은 중첩 된 선택과 함께하는 방법을 보여줍니다.

http://sqlfiddle.com/#!2/fb9d81/2/0 (바이올린 업데이트)

+0

SELECT *를 ON t1.id_t1 = t2_has_t1.fk_t1 WHERE t2_has_t1.fk_t2는 NULL입니다. duelisy의 대답에 대한 진술을 수정하면 효과가 있습니다. – ptheofan

답변

1

단일 쿼리를 수행 할 경우, 조인이 같은 것을 사용할 수 있습니다 : LEFT는 t2_has_t1 가입 T1 로부터

SELECT * FROM t1 
LEFT JOIN t2_has_t1 
ON t1.id_t1 = t2_has_t1.fk_t2 
WHERE t2_has_t1.fk_t2 IS NULL 
+0

젠장, 너 괜찮아! 그것이 매우 간단하다고 느끼는 직감이 있었다! 그것은 여전히 ​​아침에 이른 아침입니다 :). 고마워 친구! – ptheofan

+0

빌어 먹을 두 번 작동하지 않습니다! 당신이 중간 테이블에 또 다른 한 쌍의 값을 추가 했으므로 on 문을 발견하고 ... 작동하지 않습니다. fiddle (http://sqlfiddle.com/#!2/fb9d81/2/0) – ptheofan

+0

메이트 업데이트 됨, 솔루션에서 관련 링크 (on)를 수정하십시오. 그렇지 않으면 거의 정확합니다.) – ptheofan

관련 문제