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/23 16:24:59
  • 終了:2008/09/30 16:25:02

回答(2件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012008/09/23 17:34:02

ポイント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

hirotie回答回数25ベストアンサー獲得回数12008/09/23 18:22:02

ポイント35pt

select * from 商品テーブル t1

where

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

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

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません