SQL(ORACLE)について


下記に、商品テーブルと時間テーブルという2つのテーブルがあります。

商品テーブルをもとに、ファイルを作成しているのですが、
件数が膨大なため差分更新を行いたいと思います。

前回実行した時間を時間テーブルに格納し、
その時間以降に更新された商品テーブルのデータだけを抽出したいのですが、
どのように記述すればいいのか教えてください。

商品テーブルの情報が変更された場合には、UPDATEの日時が更新されます。

---------------------------------
商品テーブル
JAN,NAME,ZAIKO,UPDATE
12,SDカード,3,200809231612
15,MDカード,5,200808080820

時間テーブル
タスク,前回実行時間
UPDATEPRODUCT,200809221600
---------------------------------

例のテーブルでは、
前回の実行時間の2008/09/22 16時00分以降の
2008/09/23 16時12分に更新された商品テーブルの1行目を
抽出したいと思っています。

12,SDカード,3,200809231612

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/09/30 16:25:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント35pt

前回実行時間という項目名から判断したのは2パターン。

(1)時間テーブルには常に1レコードだけが存在すると仮定すると

SELECT 商品テーブル.*
FROM 商品テーブル
    CROSS JOIN 時間テーブル
WHERE 商品テーブル.UPDATE >= 時間テーブル.前回実行時間
;

(2)時間テーブルにはUPDATEPRODUCT以外に複数のレコードが存在すると仮定すると

SELECT 商品テーブル.*
FROM 商品テーブル
    CROSS JOIN 時間テーブル
WHERE 時間テーブル.タスク = 'UPDATEPRODUCT'
    AND 商品テーブル.UPDATE >= 時間テーブル.前回実行時間
;

更新タイミングの兼ね合いもあると思うので >= にしてありますが > で良いかもしれません。

URL必須ということで

http://jibun.atmarkit.co.jp/lskill01/rensai/bronzesql06/bronzesq...

id:hirotie No.2

回答回数25ベストアンサー獲得回数1

ポイント35pt

select * from 商品テーブル t1

where

t1.UPDATE > (select max(t2.前回実行時間) from 時間テーブル t2)

http://q.hatena.ne.jp/answer

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません