web-dev-qa-db-ja.com

複数のネストされたSELECTを持つMySQL INSERT

このようなクエリは可能ですか? MySQLで構文エラーが発生します。ネストされた選択を使用した複数の挿入値...

INSERT INTO pv_indices_fields (index_id, veld_id)
VALUES
('1', SELECT id FROM pv_fields WHERE col1='76' AND col2='val1'),
('1', SELECT id FROM pv_fields WHERE col1='76' AND col2='val2')
20
netiul

私はちょうど次の(うまくいく)をテストしました:

insert into test (id1, id2) values (1, (select max(id) from test2)), (2, (select max(id) from test2));

このクエリがないと機能しないため、selectの周りに()がなかったことが問題だと思います。

28
Thor84no

このようなサブクエリがある場合、1つの列と1行のみを返す必要があります。サブクエリが1行のみを返す場合、@ Thor84noが気づいたように、それらを囲む括弧が必要です。

彼らが行以上を返す(または返す可能性がある)場合は、代わりにこれを試してください:

INSERT INTO pv_indices_fields (index_id, veld_id)   
   SELECT '1', id 
   FROM pv_fields 
   WHERE col1='76' 
   AND col2 IN ('val1', 'val2')

または、状況が大きく異なる場合:

INSERT INTO pv_indices_fields (index_id, veld_id)
    ( SELECT '1', id FROM pv_fields WHERE col1='76' AND col2='val1' )
  UNION ALL
    ( SELECT '1', id FROM pv_fields WHERE col1='76' AND col2='val2' )
14
ypercubeᵀᴹ