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语句
我不知道哪里出了问题。我找不到任何解决方案。 谢谢解答
【问题讨论】:
您需要提供完整的测试用例,其中包含TAB1
、TAB2
和TAB3
表的定义。
【参考方案1】:
这句话是你的问题:
(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
,取决于值来自哪个表。
【讨论】:
H2 和许多其他 DBMS 也允许在选择表达式中重复列名。 @EvgenijRyazanov 。 . .select
与子查询中的重复列名之间存在差异。子查询需要知道将哪些列返回给外部查询。以上是关于H2 不允许使用集合内的连接执行选择的主要内容,如果未能解决你的问题,请参考以下文章