Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Instrução JOIN Condicional SQL Server


Acho que o que você está pedindo funcionará ao ingressar no Inicial tabela para Option_A e Option_B usando LEFT JOIN , que produzirá algo assim:
Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B

Código de exemplo:
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

Depois de ter feito isso, você 'ignora' o conjunto de NULLS. O truque adicional aqui está na linha SELECT, onde você precisa decidir o que fazer com os campos NULL. Se as tabelas Option_A e Option_B forem semelhantes, você poderá usar o COALESCE função para retornar o primeiro valor NON NULL (conforme o exemplo).

A outra opção é que você simplesmente terá que listar os campos Option_A e os campos Option_B, e deixar o que estiver usando o ResultSet para lidar com a determinação de quais campos usar.