Oracle左连接返回没有行

时间:2016-09-20 14:08:04

标签: sql oracle oracle11g

我有一个(现在完全衍生的)CTE:

feature_id | function_id | group_id | subgroup_id | type_id
1            1             null       1             null
1            1             null       null          14
2            1             null       5             null
2            1             null       null          21
3            1             null       7             null
3            1             null       null          5

我正在尝试使用以下方法整理行:

select C1.feature_id, C1.function_Id, C2.Group_ID, C3.Subgroup_ID, C4.Type_id
from CTE C1
left join CTE C2
    on C1.feature_id = C2.feature_id
    and c1.function_id = c2.function_id
    and c2.group_id is not null
left join CTE C3
    on C1.feature_id = C3.feature_id
    and c1.function_id = c3.function_id
    and c3.subgroup_id is not null
left join CTE C4
    on C1.feature_id = C4.feature_id
    and c1.function_id = c4.function_id
    and c4.type_id is not null

这给了我0行......

要验证,我跑了:

select *
from CTE C1
  

选择236行

有人可以帮忙吗?当然C1的行应该回来......

编辑:使用Oracle语法修复它:

select C1.feature_id, C1.function_Id, C2.Group_ID, C3.Subgroup_ID, C4.Type_id
from CTE C1, CTE C2, CTE C3, CTE C4
where C1.feature_id = C2.feature_id(+)
and c1.function_id = c2.function_id(+)
and C2.group_id(+) is not null
...

(我讨厌oracle语法)

1 个答案:

答案 0 :(得分:0)

好的,解决了......用Oracle语法修正了它:

select C1.feature_id, C1.function_Id, C2.Group_ID, C3.Subgroup_ID, C4.Type_id
from CTE C1, CTE C2, CTE C3, CTE C4
where C1.feature_id = C2.feature_id(+)
and c1.function_id = c2.function_id(+)
and C2.group_id(+) is not null
...

(我讨厌oracle语法)