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.