PAGE TOP

index
テーブル差分

項目 サンプル
キー列を指定してテーブルの差分を取りたい
C1C2
110
110
220
220
221
330
332
332
432
440

CC1CC2
111
220
221
330
332
   =>   
C1C2
110
110
440

CC1CC2
111
全列をキーとしてテーブルの差分を取りたい
C1C2
110
110
220
220
221
330
332
332
432
440

CC1CC2
111
220
221
330
332
   =>   
C1C2
110
110
432
440

CC1CC2
111

キー列を指定してテーブルの差分を取りたい

[結果]
C1C2
110
110
220
220
221
330
332
332
432
440

CC1CC2
111
220
221
330
332
   =>   
C1C2
110
110
440

CC1CC2
111
[VAPScript]
c1("C1") = {1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
c2("C2") = {10,10,20,20,21,30,32,32,32,40};
table1 = cbind(c1,c2);
cc1("CC1") = {1, 2, 2, 3, 3 };
cc2("CC2") = {11,20,21,30,32};
table2 = cbind(cc1,cc2);
//
key1 = "C2";
key2 = "CC2";
result = sel(not belong(table1(key1), table2(key2)), table1);
result2 = sel(not belong(table2(key2), table1(key1)), table2);
[解説]
テーブル差分では、同じ値の行データを除いたテーブルを取得します。

指定列の除いた行データを取得するには sel(not belong(, ))関数を用います。
belong()での条件列と取得テーブルには、お互いのテーブルを指定します。
result2は、差分処理でマッチしないキーを返します。


全列をキーとしてテーブルの差分を取りたい

[結果]
C1C2
110
110
220
220
221
330
332
332
432
440

CC1CC2
111
220
221
330
332
   =>   
C1C2
110
110
432
440

CC1CC2
111
[VAPScript]
c1("C1") = {1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
c2("C2") = {10,10,20,20,21,30,32,32,32,40};
table1 = cbind(c1,c2);
cc1("CC1") = {1, 2, 2, 3, 3 };
cc2("CC2") = {11,20,21,30,32};
table2 = cbind(cc1,cc2);
//
keyList1 = titles(table1);
keyList2 = titles(table2);
uniqKey1 = paste(table1(keyList1),sep=",");
uniqKey2 = paste(table2(keyList2),sep=",");
result = sel(not belong(uniqKey1, uniqKey2), table1);
result2 = sel(not belong(uniqKey2, uniqKey1), table2);
[解説]
テーブル差分では、同じ値の行データを除いたテーブルを取得します。

指定列の除いた行データを取得するには sel(not belong(, ))関数を用います。
belong()での条件列と取得テーブルには、お互いのテーブルを指定します。
全列のテーブル差分の為に、全列よりキーとなる文字列を paste()関数で作成します。
result2は、差分処理でマッチしないキーを返します。