Sql 具有按内部连接和更新连接的树结构
我有三张桌子。 表Sql 具有按内部连接和更新连接的树结构,sql,oracle,join,tree,connect,Sql,Oracle,Join,Tree,Connect,我有三张桌子。 表测试,文件夹和迭代 每个测试都与文件夹链接。 链接到测试的文件夹是许多其他文件夹的子文件夹 从这些文件夹中层次结构顶部的文件夹与表迭代链接 现在我想更新测试表中的迭代ID。所以我在测试和迭代之间有一个“快速”的连接。 这是我的尝试: update Test a set a.Iteration_ID = (nvl(( --The Select Part select b.ID from Iteration b inner join Folder c on b.Folde
测试
,文件夹
和迭代
每个测试
都与文件夹
链接。
链接到测试的文件夹
是许多其他文件夹
的子文件夹
从这些文件夹中
层次结构顶部的文件夹与表迭代链接
现在我想更新测试表中的迭代ID。所以我在测试和迭代之间有一个“快速”的连接。
这是我的尝试:
update Test a set a.Iteration_ID =
(nvl((
--The Select Part
select b.ID from Iteration b inner join Folder c on b.Folder_ID = c.ID
where c.ID =
(
select * from
(
SELECT d.ID FROM Folder d START WITH d.ID = 135196 CONNECT BY PRIOR d.parent_id = d.id
order by LEVEL desc
)
where rownum= 1
)
--End Select Part
),0));
上面的查询可以工作,但我在d.ID处有一个静态ID。我想在那里设置文件夹ID
:
问题是Oracle不知道a.folder\u id
ORA-00904: "A"."FOLDER_ID": ungültiger Bezeichner
00904. 00000 - "%s: invalid identifier"
有人知道解决问题或改进查询的更好方法吗
例如,使用选择*from和rownum=1来获取根文件夹
谢谢 我不确定您的DB结构是否正确,但我希望我的想法在这两种情况下都能对您有所帮助。因此,我建议提供更多关于数据库结构的信息,例如,对于测试
,是否会有许多迭代
因此,我的建议如下:
UPDATE test a set a.Iteration_ID =
(nvl((
SELECT i.ID
FROM Iteration i,
(SELECT id, first_value(id) over(partition by connect_by_root(id)) first_id
FROM Folder
START WITH parent_id IS NULL
CONNECT BY parent_id = PRIOR id) folder_flat
WHERE a.TEST_ID = folder_flat.first_id
and i.Folder_ID = folder_flat.ID
),0));
总体思路是将子查询中的层次结构展平,以便可以轻松联接。我不确定您的数据库结构是否正确,但我希望我的想法在这两种情况下都能对您有所帮助。因此,我建议提供更多关于数据库结构的信息,例如,对于测试
,是否会有许多迭代
因此,我的建议如下:
UPDATE test a set a.Iteration_ID =
(nvl((
SELECT i.ID
FROM Iteration i,
(SELECT id, first_value(id) over(partition by connect_by_root(id)) first_id
FROM Folder
START WITH parent_id IS NULL
CONNECT BY parent_id = PRIOR id) folder_flat
WHERE a.TEST_ID = folder_flat.first_id
and i.Folder_ID = folder_flat.ID
),0));
总体思路是将子查询中的层次结构展平,以便可以轻松地连接