Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Informix 11.50分层SQL_Sql_Informix_Hierarchical Data - Fatal编程技术网

Informix 11.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

我需要一些关于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
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