sql >> Databasteknik >  >> RDS >> Sqlserver

Villkorligt JOIN-uttalande SQL Server

Jag tror att det du efterfrågar kommer att fungera genom att gå med i Initial tabell till båda Alternativ_A och Alternativ_B med LEFT JOIN , vilket kommer att producera något i stil med detta:

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

Exempelkod:

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 detta "ignorerar" du uppsättningen NULLS. Det ytterligare tricket här är i SELECT-raden, där du måste bestämma vad du ska göra med NULL-fälten. Om tabellerna Option_A och Option_B liknar varandra kan du använda COALESCE funktion för att returnera det första NON NULL-värdet (som i exemplet).

Det andra alternativet är att du helt enkelt måste lista Option_A-fälten och Option_B-fälten, och låta allt som använder ResultSet för att hantera att avgöra vilka fält som ska användas.



  1. Boolean Field i Oracle

  2. Hur man skapar vy i oracle

  3. Fyll en sträng med inledande nollor så att den är 3 tecken lång i SQL Server 2008

  4. Hur kan jag använda mysqli_fetch_array() två gånger?