Looking for sql Keywords? Try Ask4Keywords

SQL FULL JOIN


Esempio

Un tipo di JOIN meno conosciuto è FULL JOIN.
(Nota: FULL JOIN non è supportato da MySQL come da 2016)

Un FULL OUTER JOIN restituisce tutte le righe dalla tabella di sinistra e tutte le righe dalla tabella di destra.

Se nella tabella a sinistra ci sono delle righe che non hanno corrispondenze nella tabella di destra, o se ci sono delle righe nella tabella di destra che non hanno corrispondenze nella tabella di sinistra, anche quelle righe saranno elencate.

Esempio 1 :

SELECT * FROM Table1

FULL JOIN Table2 
     ON 1 = 2 

Esempio 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 

Si noti che se si utilizzano eliminazioni software, sarà necessario controllare nuovamente lo stato di eliminazione software nella clausola WHERE (poiché FULL JOIN si comporta in modo simile a UNION);
È facile trascurare questo piccolo fatto, dal momento che hai inserito AP_SoftDeleteStatus = 1 nella clausola join.

Inoltre, se stai facendo un FULL JOIN, di solito devi consentire NULL nella clausola WHERE; dimenticarsi di consentire a NULL su un valore avrà gli stessi effetti di un join INNER, che è qualcosa che non vuoi se stai facendo un FULL JOIN.

Esempio:

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)