Looking for sql Keywords? Try Ask4Keywords

SQL FULLT GÅ MED


Exempel

En typ av JOIN som är mindre känd är FULL JOIN.
(Obs: FULL JOIN stöds inte av MySQL per 2016)

A FULL OUTER JOIN returnerar alla rader från det vänstra bordet och alla rader från det högra bordet.

Om det finns rader i den vänstra tabellen som inte har matchningar i den högra tabellen, eller om det finns rader i den högra tabellen som inte har matchningar i den vänstra tabellen, kommer de raderna också att listas.

Exempel 1:

SELECT * FROM Table1

FULL JOIN Table2 
     ON 1 = 2 

Exempel 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 

Observera att om du använder soft-deletes måste du kontrollera statusen för soft-delete igen i WHERE-klausulen (eftersom FULL JOIN uppför sig som en UNION);
Det är lätt att förbise detta lilla faktum, eftersom du sätter AP_SoftDeleteStatus = 1 i kopplingsklausulen.

Om du gör en FULL JOIN måste du också tillåta NULL i WHERE-klausulen; att glömma att tillåta NULL på ett värde kommer att ha samma effekter som en INNER-anslutning, vilket är något du inte vill ha om du gör ett FULL JOIN.

Exempel:

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)