使用父级和子级范围在单个查询中查找所有父级

时间:2018-08-09 16:50:38

标签: sql db2 parent-child

我在DB2中具有下表,其中包含父级和子级范围。每行都包含父级以及子级可以具有的相应最大值和最小值:

    parent         child_min   child_max
    ------         ---------   ----------
      1              100           300
      2              500           899
     ...
     ...

现在,我正试图在单个查询中找到一组孩子的父母。

示例:我有孩子ID:

    101, 102, 105, 208, 506.

现在查询应返回其各自的父母

    1,1,1,1,2.

我是CTE完成的。

    WITH temp(id) AS (VALUES
    101,102,105,208,506)
    SELECT parent FROM table,temp 
    WHERE child_min < = temp.id
    AND child_max >= temp.id

但是还有另一种方法可以在单个查询中不使用CTE吗?

2 个答案:

答案 0 :(得分:1)

这只是一个简单的JOIN。考虑以下数据(我增加了一行):

create table parent_children (
  parent int,
  child_min int,
  child_max int
);

insert into parent_children (parent, child_min, child_max) values (1, 100, 300);
insert into parent_children (parent, child_min, child_max) values (2, 500, 899);

查询为:

with children (id) as (values 101, 102, 105, 208, 506, 1000)
select c.id, p.parent
  from children c
  left join parent_children p on c.id between p.child_min and p.child_max;

结果:

ID          PARENT       
----------  -------
101         1            
102         1            
105         1            
208         1            
506         2            
1000        <null>   

答案 1 :(得分:0)

您喜欢这个吗?

SELECT parent
FROM table
, TABLE(VALUES  101,102,105,208,506) AS t(id) 
WHERE child_min <= t.id
AND child_max >= t.id;