Looking for sql Keywords? Try Ask4Keywords

SQL VOLLEDIG MEE


Voorbeeld

Een type JOIN dat minder bekend is, is de FULL JOIN.
(Opmerking: FULL JOIN wordt niet ondersteund door MySQL vanaf 2016)

Een VOLLEDIGE BUITENUITSLUITING retourneert alle rijen uit de linker tabel en alle rijen uit de rechter tabel.

Als er rijen in de linker tabel zijn die geen overeenkomsten hebben in de rechter tabel, of als er rijen in de rechter tabel zijn die geen overeenkomsten hebben in de linker tabel, dan zullen die rijen ook worden vermeld.

Voorbeeld 1 :

SELECT * FROM Table1

FULL JOIN Table2 
     ON 1 = 2 

Voorbeeld 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 

Merk op dat als je soft-deletes gebruikt, je de soft-delete status opnieuw moet controleren in de WHERE-clausule (omdat FULL JOIN zich een beetje als een UNION gedraagt);
Het is gemakkelijk om dit kleine feit over het hoofd te zien, omdat u AP_SoftDeleteStatus = 1 in de join-clausule plaatst.

Als je een VOLLEDIGE JOIN doet, moet je meestal NULL toestaan in de WHERE-clausule; vergeten om NULL toe te staan op een waarde heeft hetzelfde effect als een INNER join, wat je niet wilt als je een FULL JOIN doet.

Voorbeeld:

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)