Sql 递归查询中不可理解的多个相同结果(Oracle)

Sql 递归查询中不可理解的多个相同结果(Oracle),sql,oracle,recursive-query,Sql,Oracle,Recursive Query,我仍然有一些递归查询的问题,使我 绝对是疯了。我会尽量说得具体一些,但我不能用一个简单的例子来重现我所得到的。。。因此,如果需要另一个表视图,请询问 当我试图在我的表中获得“路径”和一个互连链时,我得到了一些非常奇怪的双重结果(尽管看起来完全相同)。看了之后,我可以注意到: 在不使用递归返回所需内容时,我得到: SELECT instr_id, sensor_id_in, sensor_id_out, date_begin, date_end FROM ais_conn

我仍然有一些递归查询的问题,使我 绝对是疯了。我会尽量说得具体一些,但我不能用一个简单的例子来重现我所得到的。。。因此,如果需要另一个表视图,请询问

当我试图在我的表中获得“路径”和一个互连链时,我得到了一些非常奇怪的双重结果(尽管看起来完全相同)。看了之后,我可以注意到:

在不使用递归返回所需内容时,我得到:

SELECT instr_id, sensor_id_in, sensor_id_out, date_begin, date_end FROM ais_connect JOIN ais_sensor ON ais_sensor.sensor_id = ais_connect.sensor_id_in JOIN ais_sensor_catalog ON ais_sensor_catalog.sensor_catal_id = ais_sensor.sensor_catal_id JOIN ais_instr_catalog ON ais_instr_catalog.instr_catal_id = ais_sensor_catalog.instr_catal_id WHERE ((date_begin is null or date_begin < to_date('20150120090025','YYYYMMDDHH24MISS') AND (date_end is null or date_end >=to_date('20150120090025','YYYYMMDDHH24MISS')) returns : INSTR_ID SENSOR_ID_IN SENSOR_ID_OUT DATE_BEGIN DATE_END ---------- ------------ ------------- ------------------- ------------------- 37 37 33 01/03/2012 12:00:00 31 30 2 10/04/2012 12:00:00 198 225 223 10/12/2014 09:47:03 37 40 34 01/03/2012 12:00:00 39 46 221 14/01/2015 00:00:00 39 46 9 21/02/2012 15:00:00 39 46 19 21/02/2012 15:00:00 39 46 8 21/02/2012 15:00:00 39 46 20 21/02/2012 15:00:00 39 46 13 21/02/2012 15:00:00 39 46 16 21/02/2012 15:00:00 39 46 15 21/02/2012 15:00:00 39 46 14 21/02/2012 15:00:00 39 46 12 21/02/2012 15:00:00 39 46 21 24/05/2012 12:00:00 39 46 50 07/08/2014 13:24:00 181 205 202 15/09/2014 10:00:00 181 205 203 15/09/2014 10:00:00 37 41 36 13/03/2012 12:00:00 37 42 45 24/05/2012 00:00:00 175 199 93 15/09/2014 10:00:00 196 223 219 30/11/2014 14:00:00 167 184 208 15/09/2014 10:00:00 27 26 47 21/11/2013 11:34:00 26 25 48 21/11/2013 11:34:00 165 182 218 05/11/2014 00:00:00 197 224 220 30/11/2014 14:00:00 166 183 217 05/11/2014 00:00:00 41 49 5 21/11/2013 12:34:00 挑选 仪表id、传感器id输入、传感器id输出、开始日期、结束日期 来自ais_connect 在ais_sensor上连接ais_sensor.sensor_id=ais_connect.sensor_id_in 加入ais_sensor_catalog上的ais_sensor_catalog.sensor_catal_id=ais_sensor.sensor_catal_id 在ais_instr_catalog.instr_catalog_id=ais_sensor_catalog.instr_catalog_id上加入ais_instr_catalog 其中((date_begin为空或date_begin=截止日期('20150120090025','yyyyymmddhh24miss')) 返回: 仪表ID传感器ID输入传感器ID输出日期开始日期结束 ---------- ------------ ------------- ------------------- ------------------- 37 37 33 01/03/2012 12:00:00 31 30 2 10/04/2012 12:00:00 198 225 223 10/12/2014 09:47:03 37 40 34 01/03/2012 12:00:00 39 46 221 14/01/2015 00:00:00 39 46 9 21/02/2012 15:00:00 39 46 19 21/02/2012 15:00:00 39 46 8 21/02/2012 15:00:00 39 46 20 21/02/2012 15:00:00 39 46 13 21/02/2012 15:00:00 39 46 16 21/02/2012 15:00:00 39 46 15 21/02/2012 15:00:00 39 46 14 21/02/2012 15:00:00 39 46 12 21/02/2012 15:00:00 39 46 21 24/05/2012 12:00:00 39 46 50 07/08/2014 13:24:00 181 205 202 15/09/2014 10:00:00 181 205 203 15/09/2014 10:00:00 37 41 36 13/03/2012 12:00:00 37 42 45 24/05/2012 00:00:00 175 199 93 15/09/2014 10:00:00 196 223 219 30/11/2014 14:00:00 167 184 208 15/09/2014 10:00:00 27 26 47 21/11/2013 11:34:00 26 25 48 21/11/2013 11:34:00 165 182 218 05/11/2014 00:00:00 197 224 220 30/11/2014 14:00:00 166 183 217 05/11/2014 00:00:00 41 49 5 21/11/2013 12:34:00 但当我尝试这样做时:

SELECT level lvl, connect_by_root instr_id top, connect_by_isleaf is_leaf, sys_connect_by_path(sensor_id_in, ';') chain_id FROM ais_connect JOIN ais_sensor ON ais_sensor.sensor_id = ais_connect.sensor_id_in JOIN ais_sensor_catalog ON ais_sensor_catalog.sensor_catal_id = ais_sensor.sensor_catal_id JOIN ais_instr_catalog ON ais_instr_catalog.instr_catal_id = ais_sensor_catalog.instr_catal_id WHERE (date_begin is null or date_begin =to_date('20150120090025','YYYYMMDDHH24MISS')) START WITH sensor_id_out = '219' CONNECT BY prior sensor_id_in = sensor_id_out ORDER BY lvl It returns me : LVL TOP IS_LEAF CHAIN_ID ---------- ---------- ---------- ---------------- 1 196 0 ;223 2 196 1 ;223;225 2 196 1 ;223;225 挑选 级别lvl, 通过根仪表id顶部连接, 连接\u by \u isleaf是\u leaf, 系统连接路径(传感器id位于“;”)链id 来自ais_connect 在ais_sensor上连接ais_sensor.sensor_id=ais_connect.sensor_id_in 加入ais_sensor_catalog上的ais_sensor_catalog.sensor_catal_id=ais_sensor.sensor_catal_id 在ais_instr_catalog.instr_catalog_id=ais_sensor_catalog.instr_catalog_id上加入ais_instr_catalog 其中(date_begin为空或date_begin=to_date('20150120090025','YYYYMMDDHH24MISS')) 从传感器识别号输出='219'开始 通过先前的传感器\u id\u in=传感器\u id\u out进行连接 按lvl订购 它返回给我: LVL TOP是_叶链_ID ---------- ---------- ---------- ---------------- 1 196 0 ;223 2 196 1 ;223;225 2 196 1 ;223;225
你知道为什么我可以得到这条双线吗?

请注意,
where
子句是在
connectby
之后处理的。如果这不是所需的行为,请尝试使用
connectby
-query包装你的where查询

select ...
from ( select ...
       from ...
       where ... )
start with ...
connect by ...
order by ...

不过,查询是不同的;您显示的示例数据也受结束日期的限制,并且可能有更早的开始日期。您是否仍要继续