Looking for sql Keywords? Try Ask4Keywords

SQL PEŁNE DOŁĄCZENIE


Przykład

Jednym z mniej znanych rodzajów JOIN jest FULL JOIN.
(Uwaga: FULL JOIN nie jest obsługiwany przez MySQL według 2016)

FULL OUTER JOIN zwraca wszystkie wiersze z lewej tabeli i wszystkie wiersze z prawej tabeli.

Jeśli w lewej tabeli znajdują się wiersze, które nie mają dopasowań w prawej tabeli, lub jeśli w prawej tabeli są wiersze, które nie mają dopasowań w lewej tabeli, wówczas również zostaną wyświetlone te wiersze.

Przykład 1 :

SELECT * FROM Table1

FULL JOIN Table2 
     ON 1 = 2 

Przykład 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 

Zauważ, że jeśli używasz miękkiego usuwania, będziesz musiał ponownie sprawdzić stan miękkiego usuwania w klauzuli WHERE (ponieważ PEŁNE DOŁĄCZENIE zachowuje się trochę jak UNIA);
Łatwo przeoczyć ten mały fakt, ponieważ umieściłeś AP_SoftDeleteStatus = 1 w klauzuli złączenia.

Ponadto, jeśli wykonujesz PEŁNE DOŁĄCZENIE, zwykle musisz zezwolić na NULL w klauzuli WHERE; zapominanie o dopuszczeniu wartości NULL dla wartości będzie miało takie same efekty jak złączenie WEWNĘTRZNE, co jest czymś, czego nie chcesz, jeśli wykonujesz PEŁNE DOŁĄCZENIE.

Przykład:

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)