我有一个包含三列的表
unified_id
master_id
(the third column is a primary key identity)
对于可以在任一id列中的id,我想找到一组id。 例如,如果数据看起来像这样
X001,X123
X002,X123
X123,X123
然后从X001开始我想以X001, X002 and X123
的集合返回。同样,我想要从任何成员开始的相同集合。
我们可以假设集合由unified_id列中的值组成,也就是说我们假设总有一行像第三行一样,将主id与自身相关联。
当我只有一行时,后续查询会达到最大递归级别,所以我坦率地不知道如何使用递归查询来解决这个问题。
2BM0000023, 1TE0000111
代码:
CREATE TABLE link_unified_id
(unified_id VARCHAR(16) NOT NULL,
master_id VARCHAR(16) NOT NULL
);
insert into link_unified_id values ('X001','X123');
insert into link_unified_id values ('X002','X123');
insert into link_unified_id values ('X003','X123');
insert into link_unified_id values ('X123','X123');
insert into link_unified_id values ('X999','X999');
with cte1 ( unified_id) as
(
select
up1.unified_id
from
link_unified_id as up1
where
up1.unified_id = 'X001'
union all
select
up2.unified_id
from
link_unified_id as up2
inner join
cte1 on up2.unified_id = cte1.unified_id
)
select *
from cte1
/* hoping to see output like this:
X001
X002
X003
X123
*/
答案 0 :(得分:0)
也许我没有得到它,但为什么不使用该主ID将所选项目中的主ID加入同一个表?
这样的事情:
select lu1.unified_id
from link_unified_id lu1,
link_unified_id lu2
where lu1.master_id = lu2.master_id
and lu2.unified id = 'X001'
答案 1 :(得分:0)
在我看来,我的要求是构建一个“无向图”,然后在其中找到路径(不确定术语是什么),这在SQL中的解决方案是相当程序化的(例如Recursive CTE in presence of circular references )。我决定通过Python库插入这些对来实际构建图形,这似乎比在SQL中尝试这样做更优雅。