vdo*_*lez 5 sql oracle oracle-sqldeveloper insert-select sql-insert
我有一个返回一些 ora-01427 错误的 SQL 请求:
单行子查询返回多行
INSERT INTO my_table (value0, value1, value2, value3)
VALUES((SELECT MAX(value0) FROM my_table), '5', (SELECT DISTINCT(value2) FROM another_table), '8');
Run Code Online (Sandbox Code Playgroud)
问题是,我需要两个硬编码值,我需要来自仅返回一行的选择的值,并且我想对第二个选择返回的每一行执行此操作。
我觉得如果只有一个选择,这个查询就会起作用。有没有办法在 INSERT 中执行多个 SELECT ?语法是什么?
编辑: my_table 和 some_table 实际上是同一个表,很抱歉一开始就不清楚,实际上,我需要 value0 是唯一的,因此它需要每次都检索最大的 id,不仅仅是在插入之前,而是每次新插入时行已插入。
您需要切换到 INSERT/SELECT:
INSERT INTO my_table (value0, value1, value2, value3)
SELECT DISTINCT (SELECT MAX(value0) FROM some_table), '5', value2, '8'
FROM another_table;
Run Code Online (Sandbox Code Playgroud)
回答您对 jarlh 帖子的评论:“如果每次插入值时 some_table = my_table 并且 value0 需要递增怎么办? ”
INSERT INTO my_table (value0, value1, value2, value3)
SELECT
(SELECT MAX(value0) FROM my_table)
+ ROWNUM -- ROW_NUMBER() OVER (ORDER BY whatever you need)
,'5'
,value2
,'8'
FROM
(
SELECT DISTINCT value2
FROM another_table
) dt
Run Code Online (Sandbox Code Playgroud)
编辑:
我切换到ROWNUM,但这是专有语法。Oracle 还支持标准 SQL 的 ROW_NUMBER,并且它也应该按原样工作。
| 归档时间: |
|
| 查看次数: |
8289 次 |
| 最近记录: |