MySQL Как вставить INTO таблицу с подзапросом SELECT, возвращающим несколько строк? - PullRequest
52 голосов
/ 24 февраля 2012

MySQL Как вставить в таблицу подзапрос SELECT, возвращающий несколько строк?

  INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON d.id  = f.id
     ),

     (
      "Henry"
     ),
    );

I ХОЧУ , чтобы заполнить новую таблицу всеми результатами, возвращаемыми из этого подзапроса.Как мне сделать это без получения ОШИБКА 1242 (21000): подзапрос возвращает более 1 строки

Ответы [ 7 ]

105 голосов
/ 24 февраля 2012
INSERT INTO Results (People, names )
   SELECT d.id, 'Henry'
   FROM Names f
   JOIN People d ON d.id  = f.id

Объедините статическую строку Henry с вашим запросом SELECT.

11 голосов
/ 08 ноября 2012
INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON (d.id  = f.id) limit 1
     ),

     (
      "Henry"
     ),
    );
7 голосов
/ 07 апреля 2016

Вот то, что я нашел, что работает хорошо.Это немного долго, но во многих случаях нужно перетасовать дополнительные данные.

Вставить несколько строк в table1 из table2 со значениями.ПРИМЕРЫ:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT col1,col2,col3,col4,col5 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

Вы можете вставить жестко закодированные значения, чтобы получить несколько строк с повторяющимися данными:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT "Value", col2, col3, "1900-01-01","9999-12-31" 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

Обратите внимание: «Значение», «1900-01-01»,«9999-12-31» будет повторяться для всех вставленных строк.

5 голосов
/ 24 февраля 2012
  INSERT INTO Results
    (
     People,
     names,
    )
    SELECT d.id, 'Henry'
    FROM Names f
    JOIN People d ON d.id  = f.id
1 голос
/ 10 июня 2018

В MySql можно вставить несколько значений из строк, как показано ниже, чтобы избежать дублирования. Спасибо.

   insert into brand(name) select * from ( 
select 'Fender' as name 
union select 'a' 
union ..... ) t 
where not exists (select 1 from brand t2 where t2.name COLLATE latin1_general_ci = t.name COLLATE utf8mb4_unicode_ci )
1 голос
/ 07 мая 2018

Причина этой ошибки (подзапрос возвращает более 1 строки) в том, что вы используете круглые скобки () . Посмотри внимательнее на лучший ответ. Не содержит паретеза вокруг подзапроса

0 голосов
/ 31 января 2017

вставить в ec_element (parentid, name) выбрать элемент, 'STARTUP' из ec_element, где name = 'BG';

оператор вставки получает значения elementid из найденной таблицы с выполненным условием и строку метки.

...