下記に、商品テーブルと時間テーブルという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
前回実行時間という項目名から判断したのは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...
select * from 商品テーブル t1
where
t1.UPDATE > (select max(t2.前回実行時間) from 時間テーブル t2)
コメント(0件)