子查询 - #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));
我能否将以下插入转换为可以处理子查询 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));