问题描述
我有一个包含此类信息的表。 在该条目中,id用作唯一ID,如果ind_id没有父任务,并且ind_id包含一个值,则ind_id为'0',它提到了父任务的entry_id。 下面的示例表。
entry_id | task | ind_id | date
------------------------------------------------
1000 | example_1 | 0 | 22-08-2020
1012 | example_3 | 1000 | 22-08-2020
1013 | example_4 | 1000 | 22-08-2020
1004 | example_1_14 | 0 | 22-08-2020
1006 | example_2_4 | 1004 | 22-08-2020
1007 | example_8_4 | 1006 | 22-08-2020
1010 | example_4_1 | 0 | 22-08-2020
我想要这样的数据。
entry_id | task | ind_id |parent_task_name| date
--------------------------------------------------------------
1000 | example_1 | 0 |null | 22-08-2020
1012 | example_3 | 1000 |example_1 | 22-08-2020
1013 | example_4 | 1000 |example_1 | 22-08-2020
1004 | example_1_14 | 0 |null | 22-08-2020
1006 | example_2_4 | 1004 |example_1_14 | 22-08-2020
1010 | example_4_1 | 0 |null | 22-08-2020
有人会帮助我找到解决方案吗?
解决方法
这看起来像JOIN
:
select e.*,ep.task as parent_task_name
from entries e left join
entries ep
on ep.entry_id = e.ind_id
,
尝试此查询
select a.entry_id,a.task,a.ind_id,(select task from table_name where entity_id = a.ind_id) as
parent_task_name,a.date from table_name;
,
在Oracle中使用分层查询(因为未标记数据库):
WITH CTE1 AS (
SELECT TASK,CONNECT_BY_ROOT ENTRY_ID AS root_id FROM TABLE1 A
START WITH IND_ID = 0
CONNECT BY PRIOR IND_ID = ENTRY_ID)
SELECT A.*,B.TASK AS PARENT_TASK_NAME FROM TABLE1 A LEFT OUTER JOIN CTE1 B
ON (A.IND_ID = B.ROOT_ID)
ORDER BY A.TASK,A.IND_ID;