子查询 - #1242 - 子查询返回多于1行

时间:2015-01-14 14:02:06

标签: mysql sql oracle

我能否以一种可以处理子查询返回多行的情况的方式转换以下插入?只需要第一个值。

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

还有想法在oracle中获得这个吗?

4 个答案:

答案 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));