楼主: tree_new_bee

[精华] 趣题, 第8道来了。

[复制链接]
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
71#
发表于 2012-5-10 10:01 | 只看该作者
12123434343232121

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
72#
发表于 2012-5-10 10:20 | 只看该作者
晕,还有更长的,就是从1234开始的那个,一共15个节点,其实上面这个形成一个换我应当想到可以另外加个点的

使用道具 举报

回复
论坛徽章:
27
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36托尼托尼·乔巴
日期:2017-10-25 16:45:57秀才
日期:2017-04-05 13:18:06秀才
日期:2017-03-02 10:35:322016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:302015年新春福章
日期:2015-03-06 11:57:312014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
73#
发表于 2012-5-10 10:44 | 只看该作者
看到后面简直就是在看天书。。。。。。。不知所云

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
74#
 楼主| 发表于 2012-5-10 10:50 | 只看该作者
本帖最后由 tree_new_bee 于 2012-5-10 11:00 编辑
lugionline 发表于 2012-5-10 10:01
12123434343232121

那个画图软件不错, 推荐个下载地址?


用的语句是SQLSERVER的? with的语法与oracle几乎一样啊。
lugionline对递归语句用的很纯熟啊。

翻译成oracle:
with
A (n) As
(
        Select 1 from dual
        Union All
        Select n + 1 From A Where n < 4
)
,
V0 (S, L, C) As
(
        Select Cast(n As Varchar(2000)) S, n L, 1 C From A
        Union All
        Select S || Cast(n As Varchar(2000)), n, C + 1 From V0, A
        Where Abs(L - n) = 1 And C <= 4
)
,
V  As (Select S From V0 Where C = 4)
,
R(F,T,GV)  As
(
        Select VF.S F, VT.S T, VF.S || '->' || VT.S GV From V VF, V VT
        Where SubStr(VF.S, 2, Length(VT.S) - 1) = SubStr(VT.S, 1, Length(VT.S) - 1)
)
Select * From R Order By F;

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
75#
发表于 2012-5-10 11:05 | 只看该作者
graphviz不错吧,呵呵
http://www.graphviz.org/

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
10
茶鸡蛋
日期:2012-04-19 16:08:35美羊羊
日期:2015-03-24 15:03:142015年新春福章
日期:2015-03-06 11:58:392015年新春福章
日期:2015-03-04 14:53:16马上有对象
日期:2014-08-15 13:23:54优秀写手
日期:2014-08-15 06:00:13马上加薪
日期:2014-08-14 22:48:12马上有房
日期:2014-09-04 07:54:53ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482015年新春福章
日期:2015-03-30 14:49:43
76#
发表于 2012-5-10 12:32 | 只看该作者
WITH n AS (
SELECT 1212 t,1 t1, 2 t2,1 t3, 2 t4 FROM dual UNION ALL
SELECT 1232 t,1 t1, 2 t2,3 t3, 2 t4 FROM dual UNION ALL
SELECT 1234 t,1 t1, 2 t2,3 t3, 4 t4 FROM dual UNION ALL
SELECT 2121 t,2 t1, 1 t2,2 t3, 1 t4 FROM dual UNION ALL
SELECT 2123 t,2 t1, 1 t2,2 t3, 3 t4 FROM dual UNION ALL
SELECT 2321 t,2 t1, 3 t2,2 t3, 1 t4 FROM dual UNION ALL
SELECT 2323 t,2 t1, 3 t2,2 t3, 3 t4 FROM dual UNION ALL
SELECT 2343 t,2 t1, 3 t2,4 t3, 3 t4 FROM dual UNION ALL
SELECT 3212 t,3 t1, 2 t2,1 t3, 2 t4 FROM dual UNION ALL
SELECT 3232 t,3 t1, 2 t2,3 t3, 2 t4 FROM dual UNION ALL
SELECT 3234 t,3 t1, 2 t2,3 t3, 4 t4 FROM dual UNION ALL
SELECT 3432 t,3 t1, 4 t2,3 t3, 2 t4 FROM dual UNION ALL
SELECT 3434 t,3 t1, 4 t2,3 t3, 4 t4 FROM dual UNION ALL
SELECT 4321 t,4 t1, 3 t2,2 t3, 1 t4 FROM dual UNION ALL
SELECT 4323 t,4 t1, 3 t2,2 t3, 3 t4 FROM dual UNION ALL
SELECT 4343 t,4 t1, 3 t2,4 t3, 3 t4 FROM dual
),n1 AS (
SELECT LEVEL lv,
       connect_by_root(n.t) root,
       sys_connect_by_path(n.t, '/') path1,
       sys_connect_by_path(n.t4, '/') path2
  FROM n
CONNECT BY nocycle(PRIOR t2 = t1
               AND PRIOR t3 = t2
               AND PRIOR t4 = t3) START WITH t=1212
)
SELECT * FROM n1
结果如下:

我红色框标出来的 后面不是应该至少还可以叫 4343 么?
为什么结果没有呀?
各位高手帮我看下,看什么问题?
oracle版本:10.2.0.3

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
77#
 楼主| 发表于 2012-5-10 12:58 | 只看该作者
jixch 发表于 2012-5-10 12:32
WITH n AS (
SELECT 1212 t,1 t1, 2 t2,1 t3, 2 t4 FROM dual UNION ALL
SELECT 1232 t,1 t1, 2 t2,3 t3 ...

这个很古怪, 我第一次写的时候也是跟你同样的错误现象。
后来把CONNECT BY nocycle(PRIOR t2 = t1
               AND PRIOR t3 = t2
               AND PRIOR t4 = t3)
改成了CONNECT BY nocycle(substr(prior t, 2,3) = substr(t,1,3) 就正常了。

甚至改成(PRIOR t2||PRIOR t3||PRIOR t4 = t1||t2||t3 也不行。

三个prior与nocycle之间不知发生了什么, 也不知是不是bug.

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
78#
 楼主| 发表于 2012-5-10 13:10 | 只看该作者
或者在你的三个and条件后面加上and prior t1 <> prior t2, 也能得到正确结果。

总觉得怪怪的,不知道这里的nocycle是怎么判断的。

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
10
茶鸡蛋
日期:2012-04-19 16:08:35美羊羊
日期:2015-03-24 15:03:142015年新春福章
日期:2015-03-06 11:58:392015年新春福章
日期:2015-03-04 14:53:16马上有对象
日期:2014-08-15 13:23:54优秀写手
日期:2014-08-15 06:00:13马上加薪
日期:2014-08-14 22:48:12马上有房
日期:2014-09-04 07:54:53ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482015年新春福章
日期:2015-03-30 14:49:43
79#
发表于 2012-5-10 13:25 | 只看该作者
tree_new_bee 发表于 2012-5-10 12:58
这个很古怪, 我第一次写的时候也是跟你同样的错误现象。
后来把CONNECT BY nocycle(PRIOR t2 = t1
    ...

SELECT LEVEL lv,
       connect_by_root(n.t) root,
       sys_connect_by_path(n.t, '/') path1,
       sys_connect_by_path(n.t4, '/') path2
  FROM n
CONNECT BY nocycle(substr(prior t, 2,3) = substr(t,1,3)) --START WITH t=1212
我把START WITH t=1212注释掉就是所有的
但是如果我加上不注释的话,就只能查到一条记录....
BUG?....

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
80#
发表于 2012-5-10 21:57 | 只看该作者
lugionline 发表于 2012-5-10 10:01
12123434343232121

肉眼看出来的?不错嘛只差一节。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表