Informix 11.50分层SQL
我需要一些关于Informix11.50层次数据SQL的帮助。我有下表:Informix 11.50分层SQL,sql,informix,hierarchical-data,Sql,Informix,Hierarchical Data,我需要一些关于Informix11.50层次数据SQL的帮助。我有下表: create table cont_reln ( contact char(10), relation_type char(1), related_to char(10)); contact | relation_type | related_to 1000 CH 2001 1000 CH 2002 1
create table cont_reln (
contact char(10),
relation_type char(1),
related_to char(10));
contact | relation_type | related_to
1000 CH 2001
1000 CH 2002
1000 CH 2003
2001 CH 3001
2001 CH 3002
2002 CH 3003
2003 CH 3004
3004 CH 4001
4001 CH 5001
我已经编写了两个SQL,它们可以通过联系了解所有家长和所有孩子:
-- Get the children
SELECT contact, related_to, LEVEL
FROM cont_reln
START WITH contact = '?'
CONNECT BY NOCYCLE PRIOR related_to = contact
ORDER SIBLINGS BY related_to;
-- Get the parents
SELECT contact, related_to, LEVEL
FROM cont_reln
START WITH related_to = '?'
CONNECT BY NOCYCLE PRIOR contact = related_to
ORDER SIBLINGS BY contact;
这些查询中的每一个都会返回我想要的内容,但我不确定如何组合它们,以便在我开始使用任何联系人号码时获得以下输出。。。因此,无论“?”是什么,如果它在这个层次结构中的某个地方,数据集将返回与下面完全相同的结果:
contact | relation_type | related_to
NULL NULL 1000
1000 CH 2001
2001 CH 3001
2001 CH 3002
1000 CH 2002
2002 CH 3003
2003 CH 3004
3004 CH 4001
4001 CH 5001
我知道,一旦我知道根节点,第一行(带null)必须作为单独的硬编码返回返回到SP中,但从第2行->开始,我不确定如何执行
有什么想法吗
**编辑**
查找父项的查询不正确-已修复。好的,我找到了
在一个查询中不可能做到这一点,但在存储过程中这很简单
首先,我需要知道根节点(它与组合两个查询无关)
要查找我运行的根节点,请执行以下操作:
SELECT
contact
FROM
cont_reln
WHERE
relation_type = 'CH'
START WITH related_to = '?'
CONNECT BY NOCYCLE
PRIOR contact = related_to
AND PRIOR related_to != related_to
ORDER SIBLINGS BY
contact
这是在foreach中,通过分层查询返回的虚拟方式,我始终知道最后一条记录是根
然后,我根据根联系人id运行子选择
SELECT
contact,
related_to
FROM
cont_reln
WHERE
relation_type = 'CH'
START WITH contact = 'THE RETURNED ROOT NODE ID'
CONNECT BY NOCYCLE PRIOR related_to = contact
ORDER SIBLINGS by
related_to