insert into ... select を使用すると、select 付近で構文が不正になります。なぜでしょうか? 質問する

insert into ... select を使用すると、select 付近で構文が不正になります。なぜでしょうか? 質問する

INSERT 操作内で SELECT を行うにはどうすればよいですか?

insert into tableX (a_id, b_id) 
VALUES ((SELECT service_id 
         FROM tableY 
         WHERE id = 10, 2));

しかし、サーバーは構文エラーを返します。なぜでしょうか?

SQL Error [156] [S0001]: Incorrect syntax near the keyword 'select'.

ベストアンサー1

私の最初の回答は有効な解決策を示していましたが、エラーの原因については実際には間違っていました。VALUES 句内でスカラー サブクエリを使用することは問題ありません。質問のステートメントの問題は、単に 1 つの括弧が間違った場所にあることです。スカラー サブクエリは括弧で囲む必要があります。

これは動作するはずです:

insert into tableX (a_id, b_id) 
VALUES (
  (SELECT service_id 
         FROM tableY 
         WHERE id = 10)
  , 2
  );

元の回答

VALUESリテラル値と組み合わせてのみ使用できます。ただし、リテラル値はサブクエリで使用できます。次のようにします。

insert into tableX (a_id, b_id) SELECT service_id, 2 FROM tableY WHERE id = 10

おすすめ記事