으로 여러 테이블을 병합 내가 몇 내가 이런 식으로 가입 한 테이블이 있습니다은/가입 같은 키
SELECT *
FROM tableA AS A
FULL OUTER JOIN tableB AS B
ON B.KEY = A.KEY
FULL OUTER JOIN tableC AS C
ON C.KEY = A.KEY
FULL OUTER JOIN tableD AS D
ON D.KEY = A.KEY
이 잘 작동하지만 내가 언젠가 키가 모든 테이블에 존재하지 않는 별도의 행을 얻을 수 있습니다.
예
WITH tableA([KEY], payloadColumn) AS
(
SELECT 1, 'var_A1'
), tableB([KEY], payloadColumn) AS
(
SELECT 2, 'var_B2'
), tableC([KEY], payloadColumn) AS
(
SELECT 1, 'var_C1'
), tableD([KEY], payloadColumn) AS
(
SELECT 2, 'var_D2'
)
SELECT * FROM tableA as A
FULL OUTER JOIN tableB as B ON B.[KEY] = A.[KEY]
FULL OUTER JOIN tableC as C ON C.[KEY] = A.[KEY]
FULL OUTER JOIN tableD as D ON D.[KEY] = A.[KEY]
반환
+------+---------------+------+---------------+------+---------------+------+---------------+
| KEY | payloadColumn | KEY | payloadColumn | KEY | payloadColumn | KEY | payloadColumn |
+------+---------------+------+---------------+------+---------------+------+---------------+
| 1 | var_A1 | NULL | NULL | 1 | var_C1 | NULL | NULL |
| NULL | NULL | 2 | var_B2 | NULL | NULL | NULL | NULL |
| NULL | NULL | NULL | NULL | NULL | NULL | 2 | var_D2 |
+------+---------------+------+---------------+------+---------------+------+---------------+
하지만 난 그들 모두가 결과에 동일한 행에있을 필요 (하지
2
두 행). 어떻게해야합니까? 모든 테이블은 단지 조인 병합 함께 체인 수있는이에 대한
[KEY] INCLUDE (payloadColumn)
실행 계획에 포함 인덱스가있는 경우
''FULL JOIN '으로'NULL'을 얻는 것은'JOIN'에서 제약 조건과 일치하는 행이 * 없다는 것을 의미합니다. 그것은'FULL JOIN'의 정의입니다. 대신 일치 항목이없는 행을 필터링하려면 INNER JOIN을 사용하십시오. – jpmc26
빠른 생각 : 모든 네 개의 테이블의 모든 null이 아닌 키를 합한 뷰를 만든 다음 기본 쿼리에서이 뷰를 기본 ('FROM') 테이블로 사용하고 페이로드를 왼쪽 조인 – dlatikay
@ jpmc26 - 그건 그들이 요구하는 것이 아닙니다. –