SQL FULL JOIN


Exemple

Un type de JOIN moins connu est le FULL JOIN.
(Remarque: FULL JOIN n'est pas pris en charge par MySQL en 2016)

Un FULL OUTER JOIN renvoie toutes les lignes de la table de gauche et toutes les lignes de la table de droite.

S'il y a des lignes dans la table de gauche qui n'ont pas de correspondance dans la table de droite ou s'il existe des lignes dans la table de droite qui n'ont pas de correspondance dans la table de gauche, ces lignes seront également répertoriées.

Exemple 1 :

SELECT * FROM Table1

FULL JOIN Table2 
     ON 1 = 2 

Exemple 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 

Notez que si vous utilisez des suppressions logicielles, vous devrez vérifier à nouveau l'état de suppression logicielle dans la clause WHERE (car FULL JOIN se comporte comme un UNION);
Il est facile de négliger ce petit fait, puisque vous mettez AP_SoftDeleteStatus = 1 dans la clause de jointure.

De plus, si vous effectuez un FULL JOIN, vous devrez généralement autoriser NULL dans la clause WHERE; Si vous oubliez d'autoriser NULL sur une valeur, cela aura les mêmes effets qu'une jointure INNER, ce que vous ne voulez pas si vous faites un FULL JOIN.

Exemple:

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)