求一ORACLE SQL语句

modev 2009-12-04 07:28:06
有一个表
UUID XUHAO PRICE
1 3 140
2 3.1 140
3 3.1.1 50
4 3.1.1.1 20
5 3.1.1.2 30
6 3.1.2 90
7 3.1.2.1 40
8 3.1.2.2 50
9 4 136
10 4.1 70
11 4.2 66
12 5 90


要求写一个SQL语句,得到如下的数据
UUID XUHAO PRICE
4 3.1.1.1 20
5 3.1.1.2 30
7 3.1.2.1 40
8 3.1.2.2 50
10 4.1 70
11 4.2 66
12 5 90



附创建表的脚本及测试数据
CREATE TABLE TABLE1
(
UUID VARCHAR2(20 BYTE),
XUHAO VARCHAR2(20 BYTE),
PRICE NUMBER(10,2)
)

Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('001', '3', 140);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('002', '3.1', 140);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('003', '3.1.1', 50);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('004', '3.1.1.1', 20);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('005', '3.1.1.2', 30);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('006', '3.1.2', 90);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('007', '3.1.2.1', 40);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('008', '3.1.2.2', 50);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('009', '4', 136);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('010', '4.1', 70);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('011', '4.2', 66);
Insert into TABLE1
(UUID, XUHAO, PRICE)
Values
('012', '5', 90);
COMMIT;


...全文
73 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2009-12-05
  • 打赏
  • 举报
回复
这个10g以上的版本才支持
modev 2009-12-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wildwave 的回复:]
引用 4 楼 modev 的回复:
不对啊,如果这个节点没有子节点的话,也要得到该节点的值呀

结果不对?

UUID XUHAO PRICE
004 3.1.1.1 20.00
005 3.1.1.2 30.00
007 3.1.2.1 40.00
008 3.1.2.2 50.00
010 4.1 70.00
011 4.2 66.00
012 5 90.00

不是这样的吗
[/Quote]


select * from table1 a
where connect_by_isleaf=1
start with length(xuhao)=1
connect by xuhao like prior xuhao||'.%'
and xuhao not like prior xuhao||'.%.%'


呵呵,这一个在我本地运行有错,提示:ORA-00904: "CONNECT_BY_ISLEAF": 无效的标识符
不过,你给出的第一个答案是对的,谢谢.
modev 2009-12-05
  • 打赏
  • 举报
回复
哦,谢谢了.
小灰狼W 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 modev 的回复:]
不对啊,如果这个节点没有子节点的话,也要得到该节点的值呀
[/Quote]
结果不对?

UUID XUHAO PRICE
004 3.1.1.1 20.00
005 3.1.1.2 30.00
007 3.1.2.1 40.00
008 3.1.2.2 50.00
010 4.1 70.00
011 4.2 66.00
012 5 90.00

不是这样的吗
modev 2009-12-04
  • 打赏
  • 举报
回复
不对啊,如果这个节点没有子节点的话,也要得到该节点的值呀
xchuanliu 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wildwave 的回复:]
把_改成%比较合适
select * from table1 a
where not exists(
  select 1 from table1 where xuhao like a.xuhao||'.%')

或者
select * from table1 a
where connect_by_isleaf=1
start with length(xuhao)=1
connect by xuhao like prior xuhao||'.%'
  and xuhao not like prior xuhao||'.%.%'
如果序号里的数字不会出现2位的话
可以
select * from table1 a
where connect_by_isleaf=1
start with length(xuhao)=1
connect by xuhao like prior xuhao||'._'

第一个比较好
[/Quote]
studing
小灰狼W 2009-12-04
  • 打赏
  • 举报
回复
把_改成%比较合适
select * from table1 a
where not exists(
select 1 from table1 where xuhao like a.xuhao||'.%')

或者
select * from table1 a
where connect_by_isleaf=1
start with length(xuhao)=1
connect by xuhao like prior xuhao||'.%'
and xuhao not like prior xuhao||'.%.%'
如果序号里的数字不会出现2位的话
可以
select * from table1 a
where connect_by_isleaf=1
start with length(xuhao)=1
connect by xuhao like prior xuhao||'._'

第一个比较好
小灰狼W 2009-12-04
  • 打赏
  • 举报
回复
就是要得到叶子节点的数据咯?
select * from table1 a
where not exists(
select 1 from table1 where xuhao like a.xuhao||'._')

3,497

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧