sql - 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 语句
我不知道哪里出了问题。我找不到任何解决方案。谢谢你的答案
解决方案
这句话是你的问题:
(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
,具体取决于值来自哪个表。
推荐阅读
- javascript - 数组字符串的字谜
- java - 使 JButton 周围的边框变大
- java - 6982:不满足安全条件
- jquery - 如果没有任何值,则 Jquery 添加值输入文本
- regex - 如何调整这个正则表达式以不知道键值对的顺序
- thread-local - 我们可以在 ThreadLocal 中存储多少个对象
- android - Proguard 在 android 中禁用 R8 后显示 moshi 的一些问题
- java - 如果处理时间过长,Apache Camel 是否会跳过删除从队列中读取的消息?
- python - 使用python在json中通过kafka发送和接收图片
- angular - 角库。使用 ng-packagr 的模块编译顺序