Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Instruction JOIN conditionnelle SQL Server

Je pense que ce que vous demandez fonctionnera en rejoignant l'Initial tableau à la fois Option_A et Option_B en utilisant LEFT JOIN , qui produira quelque chose comme ceci :

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

Exemple de code :

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

Une fois que vous avez fait cela, vous "ignorez" l'ensemble de NULLS. L'astuce supplémentaire ici est dans la ligne SELECT, où vous devez décider quoi faire avec les champs NULL. Si les tables Option_A et Option_B sont similaires, alors vous pouvez utiliser le COALESCE fonction pour renvoyer la première valeur NON NULL (comme dans l'exemple).

L'autre option est que vous devrez simplement lister les champs Option_A et les champs Option_B, et laisser tout ce qui utilise le ResultSet pour gérer la détermination des champs à utiliser.