简体   繁体   English

SQL服务器条件连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM