【发布时间】:2014-07-09 13:34:28
【问题描述】:
更新问题!
我有一个带有父子属性的表:
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
如果临时表的值为“green”,则结果为。结果2
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 无颜色”。
【问题讨论】:
-
关系数据库管理系统?更好地解释您查询的目标是什么,我想我不是唯一一个不了解您试图实现的目标的人......
-
由于使用了
connect by而添加了oracle标签 -
添加了 oracle 标签,因为
nvl()和CONNECT BY ... PRIOR是非常特定于 oracle 的。 -
为什么要排除“名称 1.1.3.1”?抱歉,您的问题描述不是很清楚。
-
您的问题中仍然缺少信息。请考虑删除您的 cmets 并将它们编辑到您的问题中。为什么搜索
nocolour时不显示Name2?