【发布时间】:2020-08-12 03:42:34
【问题描述】:
我必须编写一个选择语句,显示一个表中的 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 序列。如果 Shop Order 收货地址为 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;
【问题讨论】:
-
您是否尝试过自己编写查询?学习 SQL 的最好方法就是使用它。
-
为什么不使用 CustId 在客户上加入购物订单?
-
尝试将有收货地址的订单和没有收货地址的订单合并。
-
左连接客户表并指定
if(DeliveryAddress not null, DeliveryAddress, BillingAddr)