【发布时间】:2015-01-15 09:40:43
【问题描述】:
我有一个在数据库表中存储相等记录的结构。你可以认为这些记录是兄弟。例如我在这张表中有两条记录; 1=2 和 1=3。我需要一个查询来返回给定记录的所有兄弟姐妹。让我举个例子;
这是我的两列表格:
create table SIBLINGSTEST(col1 number, col2 number);
我有 2 条记录,1=2 和 1=3
insert into SIBLINGSTEST values(1,2);
insert into SIBLINGSTEST values(1,3);
我认为使用connect by是这种情况的最佳解决方案,并编写以下查询:
SELECT * FROM SIBLINGSTEST
START WITH (col1 = 1 or col2 = 1)
CONNECT BY NOCYCLE (
(PRIOR col1 = col1) or
(PRIOR col1 = col2) OR
(PRIOR col2 = col1) or
(PRIOR col2 = col2))
此查询返回正确的结果,返回两行。
如果我使用 2 作为参数,查询也会正确运行,再次返回两行。
但是如果我使用 3 作为参数,查询不会像我预期的那样运行,只返回起始行。
SELECT * FROM SIBLINGSTEST
START WITH (col1 = 3 or col2 = 3)
CONNECT BY NOCYCLE (
(PRIOR col1 = col1) or
(PRIOR col1 = col2) OR
(PRIOR col2 = col1) or
(PRIOR col2 = col2))
我想知道为什么 2 和 3 的结果不同。任何帮助或想法都会被应用。
谢谢。
【问题讨论】:
-
我不明白。什么叫兄弟姐妹?当列中的值出现多次时?
-
让我通过我的例子来解释它。 1 和 2 是兄弟姐妹。 1和3也是兄弟姐妹。所以 2 和 3 也是兄弟姐妹(间接)。插入我的表时,我有重复值检查,这些情况不在我的关注范围内。
-
还有一件事,问题出现在我们的测试数据库中,运行 oracle 10g 版本 10.2。而且我只是在一个11g的数据库上测试了情况,没有问题。查询按我的预期运行。我认为这是 11g 修复的错误。
标签: oracle siblings connect-by hierarchical-query