4

ora-01427 エラーを返す SQL リクエストがあります。

単一行サブクエリは複数の行を返します

INSERT INTO my_table (value0, value1, value2, value3) 
        VALUES((SELECT MAX(value0) FROM my_table), '5', (SELECT DISTINCT(value2) FROM another_table), '8');

問題は、ハードコードされた 2 つの値が必要であり、1 つの行のみを返す選択からの値が必要であり、2 番目の選択によって返される各行に対してそれを行いたいということです。

選択が1つしかない場合、このクエリは機能するように感じます。INSERT 内で複数の SELECT を実行する方法はありますか? 構文は何ですか?

編集: my_table と some_table は実際には同じテーブルです。そもそも明確でなくて申し訳ありませんが、実際には value0 を一意にする必要があるため、挿入の直前だけでなく、毎回新しい行が挿入されます。

4

3 に答える 3

4

INSERT/SELECT に切り替える必要があります。

INSERT INTO my_table (value0, value1, value2, value3) 
SELECT DISTINCT (SELECT MAX(value0) FROM some_table), '5', value2, '8'
FROM another_table;

jarlh の投稿に対するあなたのコメントに答えるには: 「値が挿入されるたびに some_table = my_table と value0 をインクリメントする必要があるとしたら?

INSERT INTO my_table (value0, value1, value2, value3) 
SELECT
   (SELECT MAX(value0) FROM my_table) 
     + ROWNUM -- ROW_NUMBER() OVER (ORDER BY whatever you need)
  ,'5'
  ,value2
  ,'8'
FROM
  (
    SELECT DISTINCT value2
    FROM another_table
  ) dt

編集:

に切り替えましたROWNUMが、これは独自の構文です。Oracle は標準 SQL の ROW_NUMBER もサポートしており、そのままでも動作するはずです。

于 2015-06-02T09:03:51.767 に答える