我正在尝试返回1行,当表中包含空行/空行和多行时。
表1.cust(唯一) Table2.prop(3个字段创建一个具有一个到多个cust的唯一ID) Table3.start(cust [cust,prop和start]存在一些空白/空记录)
问题在于解码和table1,table2和表3的连接。如果我只是使用table1进行连接而没有解码,我会获得额外的记录并且不会获得空记录,但是当我将这三个表组合在一起时,我仍然没有得到空/空记录。
示例代码
select table1.cust,
table2.prop.(3 fields),
decode(table3.startdate,' ','1901/01/01',
null,'1901/01/01',
table3.start)
from table1, table2(subquery), table3(subquery)
where table1 = table2(+)
and (table1.cust = table2.cust(+)
and table2.(3 fields) = table3.(3 fields))
返回 Cust1,prop3,date3 Cust2 - 失踪 Cust3,prop2,date2 Cust4,prop1,date1
示例代码
select table1.cust,
table2.prop.(3 fields),
decode(table3.startdate,' ','1901/01/01',
null,'1901/01/01',
table3.start)
from table1, table2(subquery), table3(subquery)
where table1 = table2(+)
and (table1.cust = table2.cust(+)
and table2.(3 fields) = table3.(3 fields))
返回
Cust1, prop1, date1 (not the last record)
Cust1, prop2, date2 (not the last record)
Cust1, prop3, date3 - Good
Cust2, prop1, date1 - Good
Cust3, prop1, date1 (not the last record)
Cust3, prop2, date2 - Good
Cust4, prop1, date1 - Good
答案 0 :(得分:0)
我无法确定,因为我不完全理解你的写作,但问题很可能是:
and table2.(3 fields) = table3.(3 fields))
排除任何一方的null
(null = null
在SQL中不正确,因此在where
中会导致排除行。
尝试在适当的位置添加(+)
(或or xxx is null
)以停止排除您想要的行,或者放弃那种可怕的,过时的和令人困惑的语法并与from table1 left join table2 on table2.f = table1.f
一起使用:)< / p>
另外,您可能需要阅读ternary logic。