首页 > 解决方案 > H2 不允许使用集合内的连接执行选择

问题描述

我想填充一个表中的所有列,基于来自选择的列和来自另外两个的左连接:

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 语句

我不知道哪里出了问题。我找不到任何解决方案。谢谢你的答案

标签: sqlleft-joinh2

解决方案


这句话是你的问题:

(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)

问号是AT,具体取决于值来自哪个表。


推荐阅读