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

もうかなり考えたのですが、なかなか答えが出てきません。
OracleのUPDATE文なのですが、書き換えるデータ自体は固定ですが、その対象行が他のテーブル条件を参照する場合どうすればよいのでしょうか?

うまく書く方法が分からず、INNER JOIN で実現しようとしたらSETキーワードがありません(ORA-00971)になってしまい・・・。

---------
UPDATE テーブル1
INNER JOIN テーブル2
ON テーブル1.ID = テーブル2.ID
AND テーブル1.DAT1 = TO_CHAR(テーブル2.DAT + 固定データ)
AND TO_CHAR(テーブル2.DAT2 + 固定データ) = 4
SET テーブル1.MONEY4 = 0
WHERE
テーブル1.MONEY4 > 0
---------

こんな感じのSQLです。
ようは、書き換えるデータは0なんですが、その該当するカラム条件が別に複数あって、どのように書けばよいのかが分かりません。。。

誰か詳しい人、よろしくお願いいたします。

A 回答 (2件)

事前確認してませんが…勘でw



UPDATE テーブル1
SET テーブル1.MONEY4 = 0
WHERE
テーブル1.ID IN(
  SELECT テーブル1.ID
  FROM
    テーブル1
    INNER JOIN テーブル2
    ON テーブル1.ID = テーブル2.ID
    AND テーブル1.DAT1 = TO_CHAR(テーブル2.DAT + 固定データ)
    AND TO_CHAR(テーブル2.DAT2 + 固定データ) = 4
  WHERE テーブル1.MONEY4 > 0
)
    • good
    • 0
この回答へのお礼

動きました!ありがとうございます!!
これは、WHEREの後にIDがIN以下のサブクエリでヒットしたものと合致した~ってことになるんですね・・・。
助かりましたー。。。

お礼日時:2009/02/05 18:41

こんなんじゃだめでしょうか



UPDATE テーブル1
SET テーブル1.MONEY4 = 0
WHERE
テーブル1.MONEY4 > 0
AND EXISTS
( SELECT 1 FROM テーブル2
WHERE テーブル1.ID = テーブル2.ID
AND テーブル1.DAT1 = TO_CHAR(テーブル2.DAT + 固定データ)
AND TO_CHAR(テーブル2.DAT2 + 固定データ) = 4 )
    • good
    • 0

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

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