3257_ja-JP
行が等しいかどうかを比較する同じ列フォーマットで、行数が異なる2つのデータテーブルがあります。一部の列型は文字列で、他の型は整数です。
私は、一度に1行ずつtable_1を通過するスクリプトを書き、(その行の列要素に基づいて)table_2に同じ行があるかどうかを確認します。
等号列を要素ごとに比較する必要がありますか。それとも、行全体を比較する簡単な方法はありますか。違いがあれば、どのtable_2行が等しいかを知る必要はありません。等しい値を持つ行があるかどうかだけを知る必要があります。
ありがとう、
ビルRe: 行の等価性の比較テーブル A のすべての行とテーブル B のすべての行で二重ループを実行しなくて済むようにしたい場合は、各行に 1 列ずつ追加して、その中のすべての行がどのテーブル (つまり 'A' または 'B') からのものであるかを示し、2 つのテーブルを 1 つのテーブルに連結し、結合したテーブルを、値の範囲が最も大きい 1 つまたは 2 つの列で並べ替えることができます。次に、結合したテーブルを 1 行ずつ実行して、各行と、それらの 1 つまたは 2 つの列に同一の値がある限り多くの行との間で一致を探します。どこかで一致が見つかり、それらの行の追加列で、一方の位置に 'A' があり、もう一方の位置に 'B' があることもわかった場合は、(そしてそのときだけ) 他のすべての列も項目ごとに比較します。そうすれば、全体を二重ループで実行するのではなく、テーブルを 1 回のパスで検索するだけで済みます (ほぼ同一の行が複数見つかった場合は、さらにいくつかの比較が必要になります)。
2 つのテーブルの行全体を 1 つのステートメントで比較する方法があるのかどうかはわかりませんが、比較的大きなテーブルを扱う場合には、少なくとも上記の方法によって処理速度が少し速くなるはずです。Re: 行の等価性の比較ありがとう、デイビッド。
あなたのおかげで、似たようなアプローチを思いつきました。1つ目のテーブルでは、各行の要素をすべて含む文字列を作成し、それをリストに挿入しました。同様に、2つ目のテーブルでも各行の文字列を作成し、それがリストに含まれているかどうかを確認しました。
dtOld = データテーブル("oldDelta");
dtNew = データテーブル("Delta");
nr = N行(dtOld);
nc = N Cols( dtOld );
oldList = {};
for( j = 1, j <= nr, j++,
oldString = "";
for( k = 1, k <= nc, k++,
oldString = oldString || Char( Column( dtOld, k ) )
);
insert Into( oldList, oldString );
);
nr = N行(dtNew);
for( j = 1, j <= nr, j++,
newString = "";
for( k = 1, k <= nc, k++,
newString = newString || Char( Column( dtNew, k ) )
);
if( Contains( oldList, newString ) )
Print( j )
);
);
メッセージはBill Eによって編集されました。Re: 行の等価性の比較また、2つのテーブルを結合して新しいテーブルを作成することもできます。「where」ステートメントは次のようになります。
col1A = col1B
そしてcol2A = col2B
そしてcol3A = col3B
等
結果として得られる表は重複データのみになります。列数が多い場合はかなり面倒な作業になります。
Comments
There are no comments yet