【问题标题】:H2 does not allow to execute select with join inside setH2 不允许使用集合内的连接执行选择
【发布时间】:2020-09-09 09:12:27
【问题描述】:

我想根据 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语句

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

【问题讨论】:

  • 您需要提供完整的测试用例,其中包含TAB1、TAB2 和TAB3 表的定义。

标签: sql left-join h2


【解决方案1】:

这句话是你的问题:

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

假设您在两个表中都有一个ID,因此SELECT * 返回两个名为ID 的列。我很惊讶这在 Oracle 中有效——但也许 Oracle 优化了代码,因为不需要 IDs。

只返回你想要的值:

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

问号是A 或T,取决于值来自哪个表。

【讨论】:

  • H2 和许多其他 DBMS 也允许在选择表达式中重复列名。
  • @EvgenijRyazanov 。 . . select 与子查询中的重复列名之间存在差异。子查询需要知道将哪些列返回给外部查询。
猜你喜欢
  • 2016-11-26
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多