我正在使用Oracle。我有两个表,一个存储客户ID,名称,账单地址;我有另一个表存储商店ID,名称和地址。我需要SELECT(并使用UNION,这是作业的一部分)CustomerID及其帐单地址,如果他们的帐单地址为NULL,则需要将NULL值替换为与客户关联的商店的地址。
我最接近我想要的是:
SELECT s.ordid, C.billingaddress FROM ShopOrder S
INNER JOIN Customer C
ON C.custid = S.custid
WHERE billingaddress = NULL
UNION
SELECT S.ordid, S.deliveryaddress FROM ShopOrder S
但这只是显示送货地址。我有一种感觉,我可能需要一个Outerjoin或括号,但我不确定。有什么想法吗?
答案 0 :(得分:1)
我为你准备了一个类似的测试案例:
我有两个表,emp和emp1。我想选择" comm"来自emp的字段,但只要它为NULL,我将从emp1中取值为NOT NULL。这正是您提到的规则。
SQL> DROP TABLE EMP1 PURGE
2 /
Table dropped.
SQL> CREATE TABLE EMP1 AS SELECT * FROM EMP
2 /
Table created.
SQL> UPDATE EMP1 SET COMM = 9999
2 /
14 rows updated.
SQL> COMMIT
2 /
Commit complete.
SQL> SELECT e.ename ,
2 CASE
3 WHEN e.comm IS NULL
4 THEN e1.comm
5 ELSE e.comm
6 END comm
7 FROM emp e,
8 EMP1 E1
9 WHERE E.EMPNO=E1.EMPNO
10 /
ENAME COMM
---------- ----------
SMITH 9999
ALLEN 300
WARD 500
JONES 9999
MARTIN 1400
BLAKE 9999
CLARK 9999
SCOTT 9999
KING 9999
TURNER 0
ADAMS 9999
JAMES 9999
FORD 9999
MILLER 9999
14 rows selected.
SQL>