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.