更新的问题!
我有一个包含父子属性的表:
Parent_Id Child_Id Atribute1 Atribute2(colour)
---------- ---------- ---------- ----------
1 name1 null
2 name2 null
1 3 name1.1 null
3 4 name1.1.1 grenn
3 5 name1.1.2 green
3 6 name1.1.3 null
1 7 name1.2 null
7 8 name1.2.1 green
7 9 name1.2.2 green
临时表,用于保存选定的值(颜色)
Colour
------
noclour
green
表中的层次结构如下所示:
Name2 no colour
Name1 no colour
Name 1.1 no colour
name 1.1.1 green
name 1.1.2 green
name 1.1.3 no colour
Name 1.2 no colour
name 1.2.1 green
name 1.2.2 green
我在临时表中保存了值。如果临时表具有价值' nocolour'那么层次结构表的结果就是。结果1:
Name1 no colour
Name 1.1 no colour
name 1.1.3 no colour
如果临时表有价值'绿色'然后结果会是。 RESULT2
Name1 no colour
Name 1.1 no colour
name 1.1.1 green
name 1.1.2 green
Name 1.2 no colour
name 1.2.1 green
name 1.2.2 green
我的查询:
Select * from table
where child_id in (select child_id from table
start with nvl(attribrute2, 'nocolour') in (select colour
from tmp_table)
connect by prior parent_id = child_id
)
如果在tmp_table中值为绿色,那么我的代码工作正常,我得到Result2,但如果在tmp_table中是值' nocolour'然后我得到
Name2 no colour
Name1 no colour
Name 1.1 no colour
name 1.1.3 no colour
Name 1.2 no colour
但我想得到Result1。 附:我不会更新父子表并将空值更改为“nocolour'”。 有答案的想法吗?
当我选择“没有颜色”时,我不需要Name2,因为它没有任何孩子。我不需要名称1.2,当我选择“没有颜色”时,因为名称1.2只有颜色的子项,那么这意味着该父项具有没有空值的子项( '绿色'颜色)。
行。任何人都可以只选择空子吗?在这个例子中,它将是"名称1.1.3没有颜色"。
答案 0 :(得分:0)
这将返回所有条目,这些条目至少有一个没有颜色的递归子项(SqlFiddle):
SELECT Child_Id, Attribute1
FROM (
SELECT LEVEL AS lvl, Table1.*
FROM Table1
START WITH Attribute2 IS NULL
CONNECT BY PRIOR parent_id = child_id
)
WHERE lvl > 1
GROUP BY Child_Id, Attribute1
;
结果:
CHILD_ID ATTRIBUTE1
1 name1
3 name1.1
6 name1.1.3
编辑:此查询返回所有具有所请求颜色的子项(非递归)的记录:
SELECT *
FROM Table1 parent
WHERE EXISTS
(
SELECT 1
FROM Table1 child
WHERE child.Parent_id = parent.Child_Id
AND NVL(child.Attribute2, 'nocolour') = 'green'
)