2012-03-16 1 views
0

Postgre에 인덱스를 일치하는 3 개 테이블을 조인.완전 외부 내가 SQL 쿼리 A.z 및 B.z 차 열쇠</p> <pre><code>SELECT * FROM A FULL OUTER JOIN B ON A.z = B.z WHERE A.z = 1 OR B.z = 1 </code></pre> <p>이 SQL

목적은 기본 키가 주어진 값과 일치하는 동안 두 테이블에 대한 완전 외부 조인을 수행하는 것입니다. 따라서 한 행만 반환됩니다.

하지만 3 개 이상의 테이블로 확장하는 방법에 대해 혼란스러워했습니다. 기본 키가 주어진 인덱스와 일치하여 하나의 행만 반환되는 제한이 유지됩니다. 어떻게 할 수 있니? 수

  SELECT * 
      FROM (SELECT * FROM A WHERE z = 1) A 
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z 

(IMO) 어떤 데이터 소스가 어떤 조인 조건이 더 명확 :

+0

당신은 하나 개의 행을 반환 할 경우, 완전 외부 당신을 위해 무엇을 찾고있는 조인? 완전 외부 조인은 두 테이블의 모든 행을 반환하고 일치하지 않는 경우 키에 null을 배치합니다. – jle

+0

첫 번째 쿼리는 임의의 데이터에 대해 많은 행을 반환 할 수 있기 때문에 데이터 제약에 대해 (또는 예제를 작성하십시오.) 제발 알려주십시오. – Aprillion

+0

@jle 아이디어는 3 개의 테이블 중 1 개에도 행이 있으면 주어진 열쇠 때문에, 나는 그것을 원한다. – Aman

답변

8

첫째, 당신이 요청하는 FULL OUTER JOIN는 다음과 같이 다시 쓸 수 제공된 쿼리 점에 유의. 잠시 동안 귀하의 WHERE 상태로, 나는 당신이 실제로 내부자를 원한다고 생각했습니다. 이와

보다 쉽게 ​​아마 확장 할 수

  SELECT * 
      FROM (SELECT * FROM A WHERE z = 1) A 
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z 
FULL OUTER JOIN (SELECT * FROM C WHERE z = 1) C ON COALESCE(A.z,B.z) = C.z 
FULL OUTER JOIN (SELECT * FROM D WHERE z = 1) D ON COALESCE(A.z,B.z,C.z) = D.z 
+0

이봐, 나는 그 질문에 실수를했다. 다시 볼 수 있니? 또한 B, C의 행이 B.z = C.z와 함께 존재하지만 A에 해당 행이없는 경우 어떻게해야합니까? – Aman

+0

@Aman : 수정 된 답변. – Benoit

+0

A가 B와 조인되고 A가 C와 조인되었지만 B와 C가 동시에 조인되지 않았기 때문에 이것은 작동하지 않습니다. A에 z = 1이지만 B와 C가있는 행이없는 경우를 시도했습니다. . 하나가 아닌 두 개의 행이 있습니다. – Aman