Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bedingte JOIN-Anweisung SQL Server

Ich denke, was Sie verlangen, wird funktionieren, wenn Sie der Initial beitreten Tabelle zu beiden Option_A und Option_B mit LEFT JOIN , was so etwas erzeugt:

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

Beispielcode:

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

Sobald Sie dies getan haben, „ignorieren“ Sie die Menge der NULLEN. Der zusätzliche Trick liegt hier in der SELECT-Zeile, wo Sie entscheiden müssen, was mit den NULL-Feldern geschehen soll. Wenn die Tabellen Option_A und Option_B ähnlich sind, können Sie COALESCE verwenden Funktion, um den ersten NON NULL-Wert zurückzugeben (wie im Beispiel).

Die andere Option ist, dass Sie einfach die Option_A-Felder und die Option_B-Felder auflisten müssen und lassen, was auch immer das ResultSet verwendet um festzulegen, welche Felder verwendet werden sollen.