2015-01-14 4 views
0

Можно ли преобразовать следующую вставку таким образом, чтобы она могла обрабатывать регистр, в котором подзапрос возвращает более 1 строки? Требуется только первое значение.Подзапрос - # 1242 - Подзапрос возвращает более 1 строки

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

Любая идея, чтобы получить это в оракула, а?

ответ

1

В Oracle вы можете использовать скалярный подзапрос с синтаксисом insert ... values. Для вашего примера вам нужно будет определить «первое значение», а затем написать запрос, который только возвращает это.

Если это минимальное значение:

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

Если это значение с наименьшим идентификатором (если ваша таблица имеет поле 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)); 
1

Либо использовать INSERT ..VALUES синтаксис или INSERT ..SELECT, а не как

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

, если вы всегда хотите написать value1 в там вы могли бы использовать

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

Использование insert . . . select:

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

Это будет вставлять несколько совпадающих строк, если они найдены.

Если вы хотите только одну строку, используйте limit в конце запроса select.

Смежные вопросы