• ベストアンサー
  • すぐに回答を!

UPDATE文で、書き換えるデータは固定だけどレコードを固定できない場合は・・・?

  • 質問No.4691947
  • 閲覧数2977
  • ありがとう数1
  • 回答数2

お礼率 14% (1/7)

もうかなり考えたのですが、なかなか答えが出てきません。
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なんですが、その該当するカラム条件が別に複数あって、どのように書けばよいのかが分かりません。。。

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

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 48% (180/370)

事前確認してませんが…勘で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
)
お礼コメント
buragyan

お礼率 14% (1/7)

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

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 60% (431/717)

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

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 )
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ