微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用UNION用来自另一个表的值填充NULL值

如何解决如何使用UNION用来自另一个表的值填充NULL值

我必须编写一条select语句,该语句显示一个表中的orderId和交货地址,但是如果没有交货地址,它应该显示客户的帐单地址。我不确定如何执行此操作,因为UNION需要相同数量的列。

这是两个表:

CREATE TABLE CUSTOMER (
CustId number(4) NOT NULL,CFirstName varchar2(30),CSurname varchar2(30),BillingAddr varchar2(30),Gender varchar2(1),PRIMARY KEY (CustId),CONSTRAINT Check_CGender
CHECK (CGender IN ('M','F'))
);

CREATE TABLE SHOPORDER (
OrdId number(4) NOT NULL,DeliveryAddress varchar2(30),CustId number(4),SpId number(4),PRIMARY KEY (OrdId),CONSTRAINT FK_CustId
FOREIGN KEY (CustId) REFERENCES CUSTOMER,CONSTRAINT FK_SpId
FOREIGN KEY (SpId) REFERENCES SALESPERSON
);

这是问题的措辞: 使用UNION子句列出每个订单ID和地址。该列表必须在 升序ID顺序。如果车间订单交货地址为NULL, 那么您必须显示客户的帐单邮寄地址,而不是送货地址。

任何帮助都非常有用。

我目前的尝试哈哈

SELECT Ordid,DeliveryAddress
FROM SHOPORDER
UNION
SELECT NULL AS CustId,BillingAddr
FROM CUSTOMER;


SELECT S.OrdId,S.DeliveryAddress
FROM SHOPORDER S
UNION
SELECT S.OrdId,C.BillingAddr
FROM CUSTOMER C
INNER JOIN SHOPORDER S
ON C.CustId = S.CustId;

SELECT S.OrdId 
FROM SHOPORDER S
INNER JOIN CUSTOMER C
ON S.CustId = C.CustId;
(SELECT DeliveryAddress 
FROM SHOPORDER 
UNION 
SELECT BillingAddr 
FROM CUSTOMER );

SELECT OrdId,DeliveryAddress
FROM SHOPORDER
UNION
SELECT BillingAddr
FROM CUSTOMER;

SELECT OrdId,(SELECT DeliveryAddress
FROM SHOPORDER
UNION
SELECT BillingAddr
FROM CUSTOMER)
FROM SHOPORDER;

解决方法

您正在寻找LEFT JOINCOALESCE()

select so.OrdId,coalesce(so.DeliveryAddress,c.BillingAddr) as address
from shoporder so left join
     customer c
     on so.CustId = c.CustId;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。