電子書籍の厳選無料作品が豊富!

テーブルA
 伝票No.
 発送日
 到着日(6桁)

テーブルB
 伝票No.
 送り先
 到着日(4桁)

というテーブルがあるとします。

伝票No.が同じデータで、かつ、発送日がシステム日付の場合に
2つのテーブルの到着日を翌日にするには
どのようなSQL文を書けばいいのでしょうか?


よろしくお願いいたします。

A 回答 (3件)

こんな感じじゃダメですか?


(formatの部分はDATE型を6桁または4桁文字列に変換するための書式)

update table_b b set 到着日 = TO_CHAR(SYSDATE + 1, 'format')
where exists (select * from table_a a where a.伝票No = b.伝票No
and a.発送日 = TO_CHAR(SYSDATE, 'format'));

update table_a set 到着日 = TO_CHAR(SYSDATE + 1, 'format')
where 発送日 = TO_CHAR(SYSDATE, 'format')
and exists (select * from table_a a where a.伝票No = b.伝票No);

commit/rollback;

何らかの理由で冗長なレコードを持っているなら
トリガーを実装すべきだとは思いますけどね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
SQL文を2回に分けて書けばよかったんですね。
絶対に1回で書かないといけないと思ってました。
ありがとうございます。

お礼日時:2011/07/25 09:08

「Oracle 結合を含んだ更新」でWeb検索すればよろしいかと。

    • good
    • 0
この回答へのお礼

ありがとうございます。
今後の参考になりそうなページを見つけられました。

お礼日時:2011/07/25 09:10

このような場合はストアドプロシージャを書くか、トリガーを使ってテーブルの更新をルール化する。


です。

この回答への補足

コメント有難うございます。
PL/SQLというのは、カーソルを使うということでしょうか?
随時J更新は拙いので、バッチ的に更新したいのですが
トリガーを使ってもそういうのは可能なんでしょうか?

どちらもあまりよく分からないので、的を射た内容でないかもしれません。
すみません。

補足日時:2011/07/22 11:05
    • good
    • 0
この回答へのお礼

ありがとうございます。
せっかくヒントを頂いていながら、理解できませんでした。

お礼日時:2011/07/25 09:12

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