Looking for sql Keywords? Try Ask4Keywords

SQL FULL JOIN


Beispiel

Ein weniger bekannter JOIN-Typ ist der FULL JOIN.
(Hinweis: FULL JOIN wird ab 2016 nicht von MySQL unterstützt.)

Ein FULL OUTER JOIN gibt alle Zeilen der linken Tabelle und alle Zeilen der rechten Tabelle zurück.

Wenn in der linken Tabelle Zeilen vorhanden sind, für die in der rechten Tabelle keine Übereinstimmungen vorhanden sind, oder wenn in der rechten Tabelle Zeilen vorhanden sind, die in der linken Tabelle keine Übereinstimmungen aufweisen, werden diese Zeilen ebenfalls aufgelistet.

Beispiel 1 :

SELECT * FROM Table1

FULL JOIN Table2 
     ON 1 = 2 

Beispiel 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 

Wenn Sie Soft-Deletes verwenden, müssen Sie den Soft-Delete-Status erneut in der WHERE-Klausel überprüfen (da FULL JOIN sich wie eine UNION verhält).
Es ist leicht, diese kleine Tatsache zu übersehen, da Sie AP_SoftDeleteStatus = 1 in die Join-Klausel einfügen.

Wenn Sie einen FULL JOIN ausführen, müssen Sie normalerweise NULL in der WHERE-Klausel zulassen. Wenn Sie vergessen, NULL für einen Wert zuzulassen, hat dies die gleichen Auswirkungen wie bei einem INNER-Join. Dies ist etwas, was Sie nicht möchten, wenn Sie einen FULL JOIN ausführen.

Beispiel:

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)