[英]SQL server conditional join
我必須根據一個可以為null的值來選擇相關列。 詳細:
SELECT shoporders.orderid,
shopaddresses.companyname,
shopaddresses.firstname,
shopaddresses.lastname,
shopaddresses.address1,
FROM shoporders
INNER JOIN shopaddresses
ON shoporders.InvoiceAddressId = shopaddresses.addressid
where orderid = 110
order by shoporders.createddate desc
如果shoporders.InvoiceAddressId為null,那么我必須使用shoporders.DeliveryAddressId
任何線索?
提前致謝
ON coalesce(shoporders.InvoiceAddressId, shoporders.DeliveryAddressId) = shopaddresses.addressid
你可以試試
SELECT shoporders.orderid,
shopaddresses.companyname,
shopaddresses.firstname,
shopaddresses.lastname,
shopaddresses.address1,
FROM shoporders
INNER JOIN shopaddresses
ON COALESCE (shoporders.InvoiceAddressId, shoporders.DeliveryAddressId) = shopaddresses.addressid
where orderid = 110
order by shoporders.createddate desc
編輯:有關合並的定義,請參閱MSDN 。 以下摘要
返回其參數中的第一個非空表達式。 COALESCE(expression1,...n)
等效於以下CASE
表達式:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
...
ELSE expressionN
END
你可以試試
SELECT shoporders.orderid,
shopaddresses.companyname,
shopaddresses.firstname,
shopaddresses.lastname,
shopaddresses.address1,
FROM shoporders
INNER JOIN shopaddresses
ON(
(shoporders.InvoiceAddressId IS NOT NULL
AND shoporders.InvoiceAddressId = shopaddresses.addressid)
OR (shoporders.DeliveryAddressId = shopaddresses.addressid)
)
WHERE orderid = 110
ORDER BY shoporders.createddate DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.