我有一个包含两列的表格。第一列包含课程ID idx
,第二列包含p_idx
之后的课程ID。该表如下所示:
我需要获得一个path
列,其中包含从开始课程到最后课程的完整路径。
我试图写这样的东西:
select df.idx,
df.p_idx,
case when int(right(df.path, 1)) = int(left(df1.p_idx, 1))
then concat(df.path, "\\", right(df1.path, 2))
else df.path end as new_path
from (select tab.idx,
tab.p_idx,
case when tab.p_idx is not null
then concat(tab.p_idx, "\\", tab.idx)
else tab.idx end as path
from T tab) df
left join (select tab.idx,
tab.p_idx,
case when tab.p_idx is not null
then concat(tab.p_idx, "\\", tab.idx)
else tab.idx end as path
from T tab) df1 on df.idx = df1.idx
但是我敢肯定这不是怎么做的(这也不起作用)。
桌子是这样制成的:
create table T(
idx int auto_increment primary key,
p_idx int
);
insert into T (p_idx)
values (null),
( 1 ),
( 2 ),
(null),
( 4 ),
( 3 );
您能建议创建路径的正确步骤吗?