dポイントプレゼントキャンペーン実施中!

はじめまして、似た質問があったのですが解決には至らなかったので質問させていただきます。

表A
列1…主キー
列2
--中略--
列8

表B
列1…主キー

--中略--
列8

このような二つの表があり、列1は表Bにあるものはすべて表Aにありますが、
表Aの列1には表Bの列1にはないものがあります。
それ以外の列構造は同じですがデータはすべて異なっています。
表AとBの列1の値が同じものは、表Aの列8を表Bの列8で上書きをしたいです。

UPDATE 表A SET
表A.列8 = (SELECT 表B.列8 FROM 表B
WHERE 表A.列1 = 表B.列2)
WHERE 表A.列1 =ANY(SELECT 表B.列1 FROM 表B)

このUPDATE文を実行すると、
ORA-01427: 単一行副問合せにより2つ以上の行が返されます。
というエラーになってしまいます。
検索などして、調べてみたのですが、このエラーから抜けることができません。
アドバイスをいただけたらと、投稿させていただきました。

よろしくお願いします

A 回答 (3件)

ただの投稿の書き間違いだとすると、


表B.列1がユニークである以上、エラーは出なさそうですね・・・。

とりあえず、私だったらこう進めます。
(1)SET直後の副問い合わせに"AND ROWNUM=1"を付ければ
 エラーがなくなる事を確認=間違いなくここが原因だと特定
(2)UPDATE文をなるべくコピペで編集して、
 表A.列1の値と、(select 表B.列8~)のcountとを出力するSELECTに変えて実行
(3)countが>1の表A.列1の値で、select 表B.列8~の部分を実行して結果を見る
このくらいで何か分かる予定です(^^;

ローダのdirectモードで表Bに重複データを入れたら、こうなる・・かも・・
あとはSQLの微妙な間違いで、意図した物になっていない、とか
そのくらいしか私には見当付かないです・・・。
    • good
    • 0
この回答へのお礼

この表だけできないので、何かミスをしてしまったのかもしれません。アドバイスは早速試させて頂きます。ありがとうござました

お礼日時:2007/01/27 01:11

UPDATE 表A SET


表A.列8 = (SELECT 表B.列8 FROM 表B
WHERE 表A.列1 = 表B.列2)                ←列2???
WHERE 表A.列1 =ANY(SELECT 表B.列1 FROM 表B)

この回答への補足

書き間違いでした、申し訳ありません。

補足日時:2007/01/25 23:30
    • good
    • 0

ただの書き間違いかと思ったのですが、


他におかしな所も探せなかったのでひとまず・・・
SET直後、
> 表A.列8 = (SELECT 表B.列8 FROM 表B WHERE 表A.列1 = 表B.列2)
この最後の「表B.列2」は「表B.列1」ですよね?

この回答への補足

失礼しました。
表A.列8 = (SELECT 表B.列8 FROM 表B WHERE 表A.列1 = 表B.列1)
が正しい一つ目の副問い合わせの内容です。

補足日時:2007/01/25 23:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!