C# SQL server条件联接

C# SQL server条件联接,c#,asp.net,mysql,sql,sql-server,C#,Asp.net,Mysql,Sql,Sql Server,我必须根据一个可以为null的值选择相应的列来连接。 详细内容: SELECT shoporders.orderid, shopaddresses.companyname, shopaddresses.firstname, shopaddresses.lastname, shopaddresses.address1, FROM shoporders INNER JOIN shopaddresses ON shoporders

我必须根据一个可以为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为空,则我必须使用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
编辑:有关合并的定义,请参阅。总结如下

返回其参数中的第一个非空表达式
COALESCE(表达式1,…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