このディレクトリの索引

# 出典 :: MySQL 5.0 #493 # # 同一テーブル構成のTBL-A、TBL-Bがの2つがあります。 # テーブルレイアウトは、 # 基準日   int(8) # 社員番号  int(10) # 構成     int(10) # だとします。 # # TBL-AとTBL-Bを比較し、以下のことをSQLでやりたいんですが、何か関数等あるんでしょうか? # (1)社員番号がTBL-Aに在ってTBL-Bに無い場合-->TBL-Bに該当レコード追加 # (2)社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合-->TBL-Bの該当レコードをTBL-Aで上書き # (3)社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合-->何もしない # (4)社員番号がTBL-Bに在ってTBL-Aに無い場合-->何もしない 社員構成管理(_社員番号) :- '社員番号がTBL-Aに在ってTBL-Bに無い場合-->TBL-Bに該当レコード追加'(_社員番号),!. 社員構成管理(_社員番号) :- '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合-->TBL-Bの該当レコードをTBL-Aで上書き'(_社員番号),!. 社員構成管理(_社員番号) :- '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合-->何もしない'(_社員番号),!. 社員構成管理(_社員番号) :- '社員番号がTBL-Bに在ってTBL-Aに無い場合-->何もしない'(_社員番号),!. '社員番号がTBL-Aに在ってTBL-Bに無い場合-->TBL-Bに該当レコード追加'(_社員番号) :- '社員番号がTBL-Aに在ってTBL-Bに無い場合'(_社員番号,_基準日,_構成), 'TBL-Bに該当レコード追加'(_社員番号,_基準日,_構成). '社員番号がTBL-Aに在ってTBL-Bに無い場合'(_社員番号,_基準日,_構成) :- '社員番号がTBL-Aに在って'(_社員番号,_基準日,_構成), 'TBL-Bに無い場合'(_社員番号). '社員番号がTBL-Aに在って'(_社員番号,_基準日,_構成) :-_ 'TBL-A'(_基準日,_社員番号,_構成), 'TBL-Bに無い場合'(_社員番号) :- \+('TBL-B'(_,_社員番号,_)). 'TBL-Bに該当レコード追加'(_社員番号,_基準日,_構成) :- assertz('TBL-B'(_基準日,_社員番号,_構成)). '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合-->TBL-Bの該当レコードをTBL-Aで上書き'(_社員番号) :- '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合'(_社員番号,_基準日A,_構成A,_基準日B,_構成B), 'TBL-Bの該当レコードをTBL-Aで上書き'(_社員番号,_基準日A,_構成A,_基準日B,_構成B). '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合'(_社員番号_基準日A,_構成A,_基準日B,_構成B) :- '社員番号が両方に存在し、'(_社員番号,_基準日A,_構成A,_基準日B,_構成B), 'TBL-Aの基準日がTBL-Bの基準日以降の場合'(_基準日A,_基準日B). '社員番号が両方に存在し、'(_社員番号,_基準日A,_構成A,_基準日B,_構成B) :- 'TBL-A'(_基準日A,_社員番号,_構成A), 'TBL-B'(_基準日B,_社員番号,_構成B). 'TBL-Aの基準日がTBL-Bの基準日以降の場合'(_基準日A,_基準日B) :- _基準日A @> _基準日B. 'TBL-Bの該当レコードをTBL-Aで上書き'(_社員番号,_基準日A,_構成A,_基準日B,_構成B) :- 'TBL-Bの該当レコードを'(_社員番号,_基準日B,_構成B), 'TBL-Aで上書き'(_社員番号,_基準日A,_構成A). 'TBL-Bの該当レコードを'(_社員番号,_基準日B,_構成B) :- retract('TBL-B'(_基準日B,_社員番号,_構成B)). 'TBL-Aで上書き'(_社員番号,_基準日A,_構成A) :- assertz('TBL-B'(_基準日A,_社員番号,_構成A)). '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合-->何もしない'(_社員番号) :- '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合'(_社員番号,_基準日A,_基準日B), 何もしない(_社員番号). '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合'(_社員番号,_基準日A,_基準日B) :- '社員番号が両方に存在し、'(_社員番号,_基準日A,_基準日B), 'TBL-Aの基準日がTBL-Bの基準日以前の場合'(_社員番号,_基準日A,_基準日B). '社員番号が両方に存在し、'(_社員番号,_基準日A,_基準日B) :- 'TBL-A'(_基準日A,_社員番号,_構成A), 'TBL-B'(_基準日B,_社員番号,_構成B). 'TBL-Aの基準日がTBL-Bの基準日以前の場合'(_社員番号,_基準日A,_基準日B) :- _基準日A @=< _基準日B. 何もしない(_社員番号). '社員番号がTBL-Bに在ってTBL-Aに無い場合-->何もしない'(_社員番号) :- '社員番号がTBL-Bに在ってTBL-Aに無い場合'(_社員番号), 何もしない(_社員番号). '社員番号がTBL-Bに在ってTBL-Aに無い場合'(_社員番号) :- '社員番号がTBL-Bに在って'(_社員番号), 'TBL-Aに無い場合'(_社員番号). '社員番号がTBL-Bに在って'(_社員番号) :- 'TBL-B'(_,_社員番号,_). 'TBL-Aに無い場合'(_社員番号) :- \+('TBL-A'(_,_社員番号,_)).