1

私はAskTomサイトを調べていて、更新ステートメントのための非常に強力なツールであるべきものを見つけましたが、私のステートメントはサブクエリの後にエイリアスを受け入れることを拒否しています. 誰かが私のためにこれを説明して、おそらく解決策を示してもらえますか?

Update (SELECT T.Date_,T.Name_ 
        FROM TableA T, TableB P
        WHERE P.Date_ = T.Date_
        AND   P.Name_ = T.Name_) SET P.ID = T.Name_

このタイプの更新を実行する方法については、他にも問題がある可能性があり、それはおまけです。この時点で、エイリアスの問題を理解しようとすることにもっと興味があります。サブインしてみた

TableB.ID = TableA.Name_ 

しかし運がない

具体的には、エラーは ORA-00904 無効な識別子です。

いつもありがとうございます。

上記の問題は私にとっては答えられていますが、理解しようとしているので、他にもいくつかあります。

現在、ORA-01779 は、キーが保存されていないテーブルにマップされている列を変更できません。これは、正しく更新しようとしているテーブルを参照していると思いますか? ビューまたはpkまたはfkを持たない可能性のあるその他の適切なソースから更新できるため。

このタイプの更新ステートメントは Oracle 一時テーブルで機能しますか? それとも問題が発生する可能性がありますか?

このタイプのステートメントを case ステートメントと共に使用して、TableA の複数の列を更新できますか? それとも問題が発生しますか?

再度、感謝します。

4

1 に答える 1

5

操作を実行するときUPDATE (query)、かっこの外側で使用できる列は、クエリによって返される列の名前 (この場合は Date_ と Name_) だけです。クエリで使用したテーブル エイリアスは、括弧の外でも有効ではありません。

したがって、必要なものは次のとおりです。

Update (SELECT P.ID ,T.Name_ 
        FROM TableA T, TableB P
        WHERE P.Date_ = T.Date_
        AND   P.Name_ = T.Name_) SET ID = Name_
于 2012-05-11T15:24:45.877 に答える