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

Betinget JOIN-erklæring SQL Server

Jeg tror, ​​at det, du beder om, vil fungere ved at deltage i Initial tabel til begge Option_A og Option_B ved hjælp af LEFT JOIN , som vil producere noget som dette:

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

Eksempelkode:

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

Når du har gjort dette, 'ignorerer' du sættet af NULLS. Det ekstra trick her er i SELECT-linjen, hvor du skal beslutte, hvad du skal gøre med NULL-felterne. Hvis Option_A- og Option_B-tabellerne ligner hinanden, kan du bruge COALESCE funktion for at returnere den første NON NULL-værdi (som i eksemplet).

Den anden mulighed er, at du blot bliver nødt til at liste Option_A-felterne og Option_B-felterne, og lade hvad som helst, der bruger ResultSet til at håndtere at bestemme, hvilke felter der skal bruges.



  1. Grundlæggende om SQL Server Task Automation

  2. Sådan rettes MySQL-fejlen 1064

  3. Generer klasse fra databasetabel

  4. Opret trigger for at logge SQL, der påvirkede tabel?