我想创建一个表作为这两个表的连接
Table A
[Entity] [Name] [Date]
123 A 13/10/2015
123 B 13/10/2015
123 C 13/10/2015
Table B
[Entity] [Name] [Date] [Price]
123 A 13/10/2015 10
123 B 13/10/2015 15
321 B 13/10/2015 15
我的要求是
CREATE TABLE c AS
SELECT A.entity as Entity,
A.Name as Name,
A.Date as Date,
B.Price as Price
FROM A
LEFT JOIN B
ON A.Entity = B.Entity
AND A.Name = B.Name
AND A.Date = B.Date
这很有效。我有以下结果
Table C
[Entity] [Name] [Date] [Price]
123 A 13/10/2015 10
123 B 13/10/2015 15
现在我想做同样的事情,但如果连接失败,还要保留表A中的行(并使用表B的默认值)。我期望的结果是(如果0是B.Price的默认值):
[Entity] [Name] [Date] [Price]
123 A 13/10/2015 10
123 B 13/10/2015 15
123 C 13/10/2015 0
是否可以在单个SQL请求中执行此操作?还有其他选择吗?
答案 0 :(得分:2)
这是一个非常意外的结果,因为left join
应保留A
中存在但B
中不存在的行。所以基本上,你只需要处理默认值,以防B
中没有相应的值,price
是null
,例如,使用{ {1}}:
coalesce
答案 1 :(得分:1)
使用LEFT OUTER JOIN和Oracle NVL函数::
CREATE TABLE c AS
SELECT A.entity as Entity,
A.Name as Name,
A.Date as Date,
NVL(B.Price,0) as Price
FROM A
LEFT OUTER JOIN B
ON A.Entity = B.Entity
AND A.Name = B.Name
AND A.Date = B.Date
希望它能为你效劳。