[英]SQL server conditional join
I have to choose the according column to join basing on a value that can be null. 我必须根据一个可以为null的值来选择相关列。 In detail: 详细:
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
if shoporders.InvoiceAddressId is null then I have to use shoporders.DeliveryAddressId 如果shoporders.InvoiceAddressId为null,那么我必须使用shoporders.DeliveryAddressId
Any clue? 任何线索?
Thanks in advance 提前致谢
ON coalesce(shoporders.InvoiceAddressId, shoporders.DeliveryAddressId) = shopaddresses.addressid
you could try 你可以试试
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
Edit: For a definition of coalesce see MSDN . 编辑:有关合并的定义,请参阅MSDN 。 A Summary below 以下摘要
Returns the first nonnull expression among its arguments. 返回其参数中的第一个非空表达式。 COALESCE(expression1,...n)
is equivalent to the following CASE
expression: COALESCE(expression1,...n)
等效于以下CASE
表达式:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
...
ELSE expressionN
END
You can try 你可以试试
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.