当前位置:首页 > 数据库 > Oracle技术

Oracle中 A换成B B又换成C C 又换成D 任意查一个都出来

优良自学吧提供Oracle中 A换成B B又换成C C 又换成D 任意查一个都出来,Oracle中 A换成B B又换成C C 又换成D 随便查一个都出来如下面:    号码    新号码    A  

Oracle中 A换成B B又换成C C 又换成D 随便查一个都出来
如下面:
   号码    新号码
   A            B
   B           C
   C           D
   D           E
   ……


随便搜索一个号码 关联的一连串号码都查出来:  无论是差A、B、C、D、E都能得到上述结果
------解决思路----------------------
向前向后分别查询然后union all 到一起
select 号码,新号码
from T
START WITH 新号码='指定的号码'
CONNECT BY PRIOR 号码=新号码
UNION ALL
select 号码,新号码
from T
START WITH 号码='指定的号码'
CONNECT BY PRIOR 新号码=号码

------解决思路----------------------
没看懂 楼主意图
------解决思路----------------------
引用:
没看懂 楼主意图

楼主说的太复杂了,说得简单点
就好比这个表是存储每个人手机号的变更记录,从一个号变成另外一个号
要求输入这个人使用过的任意手机号,把这个人所有手机号的变更记录都查询出来
------解决思路----------------------
引用:
Quote: 引用:

没看懂 楼主意图

楼主说的太复杂了,说得简单点
就好比这个表是存储每个人手机号的变更记录,从一个号变成另外一个号
要求输入这个人使用过的任意手机号,把这个人所有手机号的变更记录都查询出来

嗯,了然。
你那个sql向上 向下树形查询 union起来,略屌啊。
------解决思路----------------------
引用:
Quote: 引用:

向前向后分别查询然后union all 到一起
select 号码,新号码
from T
START WITH 新号码='指定的号码'
CONNECT BY PRIOR 号码=新号码
UNION ALL
select 号码,新号码
from T
START WITH 号码='指定的号码'
CONNECT BY PRIOR 新号码=号码

报错啊,版主

报什么错啊?是不是你的数据中存在循环,如A变为B,然后B再变成A?
试试加上connect by nocycle
------解决思路----------------------
ORACLE 的递归查询。 

START WITH 。。。。
CONNECT BY PRIOR 。。。。

(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢

最近更新