Sql 将一个表中的一列与另两个表中的另一列合并

Sql 将一个表中的一列与另两个表中的另一列合并,sql,join,union,Sql,Join,Union,我不完全确定如何命名我的问题,如果有人知道一个更好的标题,请随意编辑它 基本上我有一个问题,我不知道该怎么办 我有一个带有送货地址和账单地址的数据库。如果送货地址为空,我希望它显示帐单地址。我通过以下方式实现了这一目标: SELECT DELIVERYADDRESS AS "Address" FROM SHOPORDER so UNION SELECT BILLINGADDR AS "Address" FROM CUSTOMER 这样就行了。我还需要将其与订单“连接”。所以我这样做: SEL

我不完全确定如何命名我的问题,如果有人知道一个更好的标题,请随意编辑它

基本上我有一个问题,我不知道该怎么办

我有一个带有送货地址和账单地址的数据库。如果送货地址为空,我希望它显示帐单地址。我通过以下方式实现了这一目标:

SELECT DELIVERYADDRESS AS "Address"
FROM SHOPORDER so
UNION 
SELECT BILLINGADDR AS "Address"
FROM CUSTOMER
这样就行了。我还需要将其与订单“连接”。所以我这样做:

SELECT ORDID FROM SHOPORDER
我想要的是我的桌子看起来像
|ORDID地址(DeliveryAddress或BillingAddress,如果DeliveryAddress为空)

请注意,我的问题单说明我必须使用工会。我试过这个:

SELECT ORDID, (SELECT DELIVERYADDRESS FROM SHOPORDER
    UNION 
        SELECT BILLINGADDR FROM CUSTOMER)
FROM SHOPORDER

但它不起作用。我已经试了一个小时了,我就是想不出来。我试过内部连接、左连接、右连接等等。我就是搞不懂。有人知道吗?谢谢。

既然你提到工会是强制性的

SELECT ORDID,DELIVERYADDRESS AS "Address"
FROM SHOPORDER 
WHERE DELIVERYADDRESS IS NOT NULL

UNION 

SELECT ORDID,BILLINGADDR AS "Address"
FROM CUSTOMER 
WHERE ORDID IN ( SELECT ORDID
                 FROM SHOPORDER 
                 DELIVERYADDRESS IS NULL
               )

您可以为此使用coalesce:

从中选择ordid、合并(deliveryaddress、billingaddress) 使用(customerid)加入shoporder客户

假设customerid是连接两个表的字段。 Coalesce非常简单:如果第一个参数为null,则使用第二个参数


--dmg

我通过查看mhasan的答案,能够让它工作:

SELECT ORDID,DELIVERYADDRESS AS "Address"
FROM SHOPORDER so
WHERE DELIVERYADDRESS IS NOT NULL
UNION 
SELECT so.ORDID, c.BILLINGADDR AS "Address"
FROM SHOPORDER so
INNER JOIN CUSTOMER c
ON so.CUSTID = c.CUSTID
WHERE so.DELIVERYADDRESS IS NULL
ORDER BY ORDID ASC

我不认为Customer表会有OrderyLeah列,Customer没有ORDID列,这就是为什么我会有这样的问题:/@nhasan由于您的解决方案,我能够想出一个解决方案,我会将您的标记为最佳答案,但我也会发布我的,以防其他人有类似情况。我很好奇,你为什么不使用coalesce呢?这将在一个更简单的声明中完成(您在联盟中的第二次加入),并且将更有效。我将结束您的好奇dmg。我想这是作业!
SELECT ORDID,DELIVERYADDRESS AS "Address"
FROM SHOPORDER so
WHERE DELIVERYADDRESS IS NOT NULL
UNION 
SELECT so.ORDID, c.BILLINGADDR AS "Address"
FROM SHOPORDER so
INNER JOIN CUSTOMER c
ON so.CUSTID = c.CUSTID
WHERE so.DELIVERYADDRESS IS NULL
ORDER BY ORDID ASC