72

MySQL複数の行を返すSELECTサブクエリを使用してテーブルにINSERTを実行するにはどうすればよいですか?

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

     (
      "Henry"
     ),
    );

このサブクエリから返されるすべての結果を新しいテーブルに入力したいと思います。エラー1242(21000)を取得せずにこれを行うにはどうすればよいですか:サブクエリは複数の行を返します

4

7 に答える 7

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

静的文字列HenrySELECTクエリと組み合わせます。

于 2012-02-23T22:40:10.723 に答える
13

これが私が見つけたもので、うまく機能します。少し長いですが、多くの場合、余分なデータをシャッフルする必要があります。

値を使用して、table2からtable1に複数の行を挿入します。例:

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」は、挿入されたすべての行で繰り返されます。

于 2016-04-07T15:41:29.663 に答える
9
  INSERT INTO Results
    (
     People,
     names,
    )
    SELECT d.id, 'Henry'
    FROM Names f
    JOIN People d ON d.id  = f.id
于 2012-02-23T22:40:01.423 に答える
8
INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON (d.id  = f.id) limit 1
     ),

     (
      "Henry"
     ),
    );
于 2012-11-08T12:07:11.143 に答える
2

このエラー(サブクエリは複数の行を返す)の理由は、括弧()を使用しているためです。ベストアンサーにもっと注意してください。サブクエリの周りのparethesisは含まれていません

于 2018-05-07T09:14:13.303 に答える
1

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 )
于 2018-06-10T17:07:42.693 に答える
-1

ec_element(parentid、name)に挿入します。selectelementid、'STARTUP' from ec_element where name ='BG';

insertステートメントは、条件が満たされたテーブルとラベル文字列から値elementidを取得します。

于 2017-01-31T11:18:12.550 に答える