子查询 - #1242 - 子查询 returns 多于 1 行

subquery - #1242 - Subquery returns more than 1 row

我能否将以下插入转换为可以处理子查询 returns 多于 1 行的情况?只需要第一个值。

insert into mytable (column1,column2) values ('value1', select value from mytable2 where columnX='ABC')

是否也想在 oracle 中获取它?

使用 INSERT ..VALUES 语法或 INSERT ..SELECT,不能同时使用

insert into mytable (column1,column2)
select 'value1',value from mytable2 where columnX='ABC'

如果你总是想在其中写入 value1,你可以使用

INSERT INTO mytable (column1,column2) (SELECT 'value1', value FROM mytable2 WHERE columnX='ABC')

使用insert . . . select:

insert into mytable(column1, column2) 
    select 'value1', value
    from mytable2
    where columnX = 'ABC';

如果找到,这将插入多个匹配行。

如果您只需要一行,则在 select 查询末尾使用 limit

在 Oracle 中,您可以使用带有 insert...values 语法的标量子查询。对于您的示例,您需要定义 "first value" 然后编写一个仅 returns 的查询。

如果是最小值:

insert into mytable (column1,column2) values (9, (select min(value) from mytable2 where columnX = 'ABC'));

如果它是具有最低 id 的值(假设您的 table 有一个 id 字段):

insert into mytable (column1,column2) values (9, 
                                              (select value
                                                 from (select value,
                                                              row_number() over (order by id) rn
                                                         from mytable2
                                                        where columnX = 'ABC')
                                                where rn = 1));