プロが教えるわが家の防犯対策術!

「テーブルの特定の項目を、別のテーブルを参照した値でupdateできない」問題で悩んでいます。

以下の2つのテーブルがある場合、

select * from TAB_A
COL001 COL002 COL003
------ ------ ------
00001 YYY DE
00002 YYY FG
00003 YYY HI

select * from TAB_B
COL001 COL002 COL003
------ ------ ------
00001 YYY ST
00002 YYY UV
00003 YYY WX

TAB_AのCOL01とCOL02 を条件に TAB_BのCOL03を検索して、TAB_AのCOL03を更新するために

update TAB_A set TAB_A.COL003 = (
select TAB_B.COL003
from TAB_A,TAB_B
where TAB_A.COL01 = TAB_B.COL01 and
TAB_A.COL02 = TAB_B.COL02 )

と、記述すると、

ORA-01427: 単一行副問合せにより2つ以上の行が返されます。
とのメッセージが表示される場合があります。
なにか良い解決策はあるでしょうか?

「SQLは、実はテーブルの特定の項目を、別のテーブルを参照した値でupdateできない」のだ、との噂も聞きますが....

なお、使用しているDBは Oracle10gです。

A 回答 (1件)

相関問い合わせでの更新は、UPDATE対象の表の更新レコードに対応する1件を返す副問い合わせ文を


書かないといけないのですが、副問い合わせ文の中で、更新表をFROMに書いてしまうと、更新表と
無関係の副問い合わせを行ってしまいます。

update TAB_A set TAB_A.COL003 = (
select TAB_B.COL003
from TAB_B /* <============================注目 */
where TAB_A.COL01 = TAB_B.COL01 and
TAB_A.COL02 = TAB_B.COL02 )

のようにすれば、問題なく動作するかと思いますよ。
    • good
    • 10
この回答へのお礼

お礼が晩くなりまして申し訳ありません。
無事解決しました。

お礼日時:2006/12/05 01:09

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す