Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione JOIN condizionale SQL Server

Penso che ciò che chiedi funzionerà unendoti alla Iniziale tabella a entrambi Opzione_A e Opzione_B utilizzando LEFT JOIN , che produrrà qualcosa del genere:

Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B

Codice di esempio:

SELECT i.*, COALESCE(a.id, b.id) as Option_Id, COALESCE(a.name, b.name) as Option_Name
FROM Initial_Table i
LEFT JOIN Option_A_Table a ON a.initial_id = i.id AND i.special_value = 1234
LEFT JOIN Option_B_Table b ON b.initial_id = i.id AND i.special_value <> 1234

Una volta fatto questo, 'ignori' il set di NULLS. Il trucco aggiuntivo qui è nella riga SELECT, dove devi decidere cosa fare con i campi NULL. Se le tabelle Option_A e Option_B sono simili, puoi utilizzare il COALESCE funzione per restituire il primo valore NON NULL (come nell'esempio).

L'altra opzione è che dovrai semplicemente elencare i campi Option_A e Option_B, e lasciare che qualunque cosa stia usando il ResultSet per gestire la determinazione dei campi da utilizzare.