H2 不允许使用集合内的连接执行选择

Posted

技术标签:

【中文标题】H2 不允许使用集合内的连接执行选择【英文标题】:H2 does not allow to execute select with join inside set 【发布时间】: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语句

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

【问题讨论】:

您需要提供完整的测试用例,其中包含TAB1TAB2TAB3 表的定义。 【参考方案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)

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

【讨论】:

H2 和许多其他 DBMS 也允许在选择表达式中重复列名。 @EvgenijRyazanov 。 . . select 与子查询中的重复列名之间存在差异。子查询需要知道将哪些列返回给外部查询。

以上是关于H2 不允许使用集合内的连接执行选择的主要内容,如果未能解决你的问题,请参考以下文章

Redis实战-集合

Redis实战-集合

2.4.1 集合基础知识

在 Magento 的集合中选择连接表中的多行查询

那些年我们用到的jquery选择器!!

redis 简单整理——redis 的集合基本结构和命令[五]