Sql INSERT INTO объединение значений и выбор неудачи

Я хотел вставить два значения, одно заполнено фиксированным числом, а другое - идентификатором из другой таблицы.

Теперь я получил ошибку

#1242 - Подзапрос возвращает более 1 строки.

INSERT INTO table1 (value1, value2) VALUES 
(6 , (SELECT id FROM table2 WHERE name = 'Peter'))

Возможно ты можешь помочь мне.

2 ответа

Решение

Если вы хотите вставить запись в вашу таблицу1 для каждой записи в таблице2, где имя Питер, этот подход должен работать.

Этот запрос вставки вставит все записи из таблицы2, где имя "Питер", в таблицу1. Если вы хотите вставить только одну запись, вы можете использовать LIMIT как объяснил Макми в своем ответе

insert into dbo.table1
(
     value1,
     value2
)(
     select 
          6,
          table2.id 
     from 
          table2
     where
          name = 'Peter'
)

Попробуйте использовать LIMIT 1:

INSERT INTO table1 (value1, value2) VALUES (6 , (SELECT id FROM table2 WHERE name = 'Peter' LIMIT 1))

Таким образом, в вашем вложенном запросе (SELECT id FROM table2 WHERE name = 'Peter' LIMIT 1) он вернет только первое совпадение, и ваша вставка должна пройти.

Имейте в виду, что если вы намеревались вставить новые строки для КАЖДОЙ строки в таблице 2 с именем "Питер", тогда будет вставлена ​​только первая.

Другие вопросы по тегам