我在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吗?
答案 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;