7

以下に示す update ステートメントは正常に動作します。サブクエリで with ステートメントを使用してパフォーマンスを大幅に向上させましたが、何らかの理由で同じテーブルから列を追加して更新することはできません。

作品:

UPDATE Table_A SET (Col_One) = (WITH OneValue AS (SELECT DISTINCT t.Col_One
                                                  FROM Table_Two t, Table_A a
                                                  WHERE t.id = a.New_Id))
                                SELECT Col_One FROM OneValue);

私がやりたいのは、このように table_two からも更新する別の列を含めることです

UPDATE Table_A SET (Col_One, Col_Two) = (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two
                                                  FROM Table_Two t, Table_A a
                                                  WHERE t.id = a.New_Id))
                                SELECT Col_One, Col_Two FROM OneValue);

しかし、ora-01767 update set expression must be a subquery が表示されます。このエラーは理解できますが、どのように生成されているかわかりません。どんな助けでも大歓迎です。

前もって感謝します。

4

1 に答える 1

9

これは機能しているように見えます(とにかくDUALを使用した単純なクエリで機能しました):

UPDATE Table_A SET (Col_One, Col_Two) = (select col_one, col_two from
                                          (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two
                                                  FROM Table_Two t, Table_A a
                                                  WHERE t.id = a.New_Id))
                                           SELECT Col_One, Col_Two FROM OneValue)
                                        );

サブクエリが「WITH」で始まる場合になぜ機能しないのかというと、Oracle SQL の設計者がこの使用法を想定していなかったからだとしか思えません。

于 2012-06-06T15:42:00.473 に答える