Looking for sql Keywords? Try Ask4Keywords

SQL 전체 연결


덜 알려진 JOIN의 한 유형은 FULL JOIN입니다.
(참고 : FULL JOIN은 MySQL에 의해 2016 년까지 지원되지 않습니다)

FULL OUTER JOIN은 왼쪽 테이블의 모든 행과 오른쪽 테이블의 모든 행을 반환합니다.

왼쪽 테이블에서 오른쪽 테이블과 일치하는 행이 없거나 왼쪽 테이블에서 일치하지 않는 행이 오른쪽 테이블에있는 경우 해당 행도 나열됩니다.

예제 1 :

SELECT * FROM Table1

FULL JOIN Table2 
     ON 1 = 2 

예 2 :

SELECT 
     COALESCE(T_Budget.Year, tYear.Year) AS RPT_BudgetInYear 
    ,COALESCE(T_Budget.Value, 0.0) AS RPT_Value 
FROM T_Budget 

FULL JOIN tfu_RPT_All_CreateYearInterval(@budget_year_from, @budget_year_to) AS tYear 
      ON tYear.Year = T_Budget.Year 

소프트 삭제를 사용하는 경우 WHERE 절에서 소프트 삭제 상태를 다시 확인해야합니다 (FULL JOIN이 일종의 UNION처럼 동작하기 때문에).
이 작은 사실을 간과하는 것은 쉽습니다. AP_SoftDeleteStatus = 1을 join 절에 넣었 기 때문입니다.

또한 FULL JOIN을 수행하는 경우 일반적으로 WHERE 절에서 NULL을 허용해야합니다. 값에 NULL을 허용하는 것을 잊어 버리는 것은 INNER 조인과 같은 결과를 낳습니다.이 조인은 FULL JOIN을 수행하는 경우 원하지 않는 것입니다.

예:

SELECT 
     T_AccountPlan.AP_UID
    ,T_AccountPlan.AP_Code
    ,T_AccountPlan.AP_Lang_EN
    ,T_BudgetPositions.BUP_Budget
    ,T_BudgetPositions.BUP_UID 
    ,T_BudgetPositions.BUP_Jahr
FROM T_BudgetPositions    

FULL JOIN T_AccountPlan
    ON T_AccountPlan.AP_UID = T_BudgetPositions.BUP_AP_UID 
    AND T_AccountPlan.AP_SoftDeleteStatus = 1 

WHERE (1=1) 
AND (T_BudgetPositions.BUP_SoftDeleteStatus = 1 OR T_BudgetPositions.BUP_SoftDeleteStatus IS NULL) 
AND (T_AccountPlan.AP_SoftDeleteStatus = 1 OR T_AccountPlan.AP_SoftDeleteStatus IS NULL)