2016-06-14 3 views
0

조인 테이블 J를 통해 다른 테이블 B에 조인 된 테이블 A가 있습니다. 테이블 A의 해당 행이없는 모든 행에 액세스하려면 어떻게해야합니까? 테이블 B의 주어진 속성을 기반으로 J의 "join"엔트리? 예를 들어 : 조인 테이블에 해당 항목이없는 행 찾기

Table A: 
------- 
id 

Table J: 
------- 
A_id 
B_id 

Table B: 
------- 
id 
name 

는 말 그 주어진 B.name = "휘 티어"에 대한, 우리가 어떻게 판단 할 수있는 모든 행 위치를 B.name = "휘 티어"B_id와 J에 항목이없는하는? 나는 이것이 단순한 쿼리 여야한다고 생각하고, GROUP BY을 사용하는 것을 고려했다. 왜냐하면 A의 각 항목에 대해 당신이 작업하고있는 B_id (이 경우 B.name = "Suzie"))는 A_id의 각 "그룹"에 대해 J에 존재합니다. 여하튼, 나는 이것의 주위에 나의 머리를 감쌀 수 없다; 올바른 방향으로 밀고 나가는 것을 감사 할 것입니다.

답변

2

당신은 WHERE NOT EXISTS하여이 작업을 수행 할 수 있습니다

Select A.* 
From TableA A 
Where Not Exists 
(
    Select 1 
    From TableJ J 
    Join TableB B On B.id = J.B_id 
    Where J.A_id = A.id 
    And  B.Name = 'Suzie' 
) 
+1

내부 선택의 열이 어디에도 필요 없다는 것이 명확하므로 'EXISTS()'를 사용할 때 SELECT 1을 쓰는 것이 좋습니다. – sagi

+1

사실, 'EXISTS' 문으로 일부 모호성을 제거합니다. – Siyual

0

나는이 작업을 수행하는 또 다른 방법은 조인 테이블에 LEFT OUTER JOIN을하는 것입니다 생각하지만, 또 다른 ON 조건 J.b_id 원하는에 대한 b.id이다 "이름". 따라서 해당 B 항목이 있거나없는 항목을 모두 A에서 검색 할 수 있습니다.

SELECT A.* 
FROM A 
LEFT OUTER JOIN J 
ON J.a_id = a.id AND J.b_id IN 
    (SELECT id FROM B where B.name "Suzie") 
WHERE J.a_id IS NULL 

성능에 대해 궁금한 점이 있습니까?

관련 문제