Sql H2不允许使用集合内的联接执行select

Sql H2不允许使用集合内的联接执行select,sql,left-join,h2,Sql,Left Join,H2,我想根据select中的列和其他两个表中的左连接填充一个表中的所有列: update TAB1 as P set P.COL1 = ( select CODE from ( select * from TAB2 as A left outer join TAB3 as T on A.TAGID = T.ID ) as O where P.ACTID = O.ACTID ); 它在Oracle上正常工作,但当我想在h2上执行它时,出现了以下错误: 重复的列名“ID”;SQL语句 我不

我想根据select中的列和其他两个表中的左连接填充一个表中的所有列:

update TAB1 as P
  set P.COL1 = (
  select CODE from (
  select * from TAB2 as A left outer join TAB3 as T on A.TAGID = T.ID
) as O
where P.ACTID = O.ACTID
);
它在Oracle上正常工作,但当我想在h2上执行它时,出现了以下错误:

重复的列名“ID”;SQL语句

我不知道哪里出了问题。我找不到解决办法。
Thx对于答案

这句话是你的问题:

(select * from TAB2 as A left outer join TAB3 as T on A.TAGID = T.ID)
假设两个表中都有一个
ID
,因此
SELECT*
返回两个名为
ID
的列。我很惊讶这在Oracle中能起作用——但也许Oracle优化了代码,因为不需要
ID
s

只需返回所需的值:

(select ?.CODE from TAB2 as A left outer join TAB3 as T on A.TAGID = T.ID)

问号为
A
T
,具体取决于值来自哪个表。

您需要提供一个完整的测试用例,其中包含
TAB1
TAB2
的定义,和
TAB3
tables.H2和许多其他DBMS也允许在select表达式中使用重复的列名。@EvgenijRyazanov。
select
中的重复列名与子查询中的重复列名之间存在差异。子查询需要知道哪些列返回到外部查询。