我能否以一种可以处理子查询返回多行的情况的方式转换以下插入?只需要第一个值。
insert into mytable (column1,column2) values ('value1', select value from mytable2 where columnX='ABC')
还有想法在oracle中获得这个吗?
答案 0 :(得分:1)
使用INSERT ..VALUES
语法或INSERT ..SELECT
,而不是两者
insert into mytable (column1,column2)
select 'value1',value from mytable2 where columnX='ABC'
答案 1 :(得分:1)
如果你总是想在那里写value1,你可以使用
INSERT INTO mytable (column1,column2) (SELECT 'value1', value FROM mytable2 WHERE columnX='ABC')
答案 2 :(得分:1)
使用insert . . . select
:
insert into mytable(column1, column2)
select 'value1', value
from mytable2
where columnX = 'ABC';
如果找到,将插入多个匹配的行。
如果您只想要一行,请在limit
查询末尾使用select
。
答案 3 :(得分:1)
在Oracle中,您可以使用带有insert ... values语法的标量子查询。对于您的示例,您需要定义"第一个值"然后编写一个只返回该查询的查询。
如果是最小值:
insert into mytable (column1,column2) values (9, (select min(value) from mytable2 where columnX = 'ABC'));
如果它是id最低的值(假设你的表有一个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));