JOIN auf Tabelle A oder Tabelle B
Eine Person hat eine Rechnungsdresse und optional eine Lieferadresse. Falls eine Lieferadresse vorhanden ist, soll diese ausgegeben werden, falls nicht die Rechnungsadresse. Dies könnte man folgendermassen lösen:
SELECT
A.AddressString
FROM
Person P
INNER JOIN
Address A ON A.AddressId = ISNULL(P.AddressId, P.DeliveryAddressId)
Dummerweise kann die JOIN Bedingung mit der ISNULL Funktion dazu führen, dass ein bestehender Index auf Address.Id nicht verwendet wird.
Folgende Variante gibt zwar etwas mehr zu schreiben, die Performance ist jedoch um Welten besser:
SELECT
ISNULL(A2.AddressString, A1.AddressString) AddressString
FROM
Person P
INNER JOIN
Address A1 ON A.AddressId = P.AddressId
LEFT OUTER JOIN
Address A2 ON A.AddressId = P.DeliveryAddressId
Kommentare
Kommentare sind geschlossen.