Sql H2不允许使用集合内的联接执行select
我想根据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语句 我不
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
中的重复列名与子查询中的重复列名之间存在差异。子查询需要知道哪些列返回到外部查询。