Join(横方向の連結)は、データテーブルを左右に連結します。
dt << Join( //主テーブルへメッセージを送る
With(dataTable), // 結合するデータテーブル
Select With(columns), // 出力テーブルに追加する、
//結合するテーブルの列を選択する
Select With(columns), // 出力テーブルに追加する副テーブル
// の列を選択する
// 結合の方法。ほかにも次のものがある。
Cartesian join、By Row Number、By matching columns(col1=col2, ...)
Merge Same Name Columns, // 同名の列をマージ
Copy Formula(0), // デフォルトはオン。0でオフになる
Suppress Formula Evaluation(0), // デフォルトはオン。0でオフになる
Match Flag(1), //対応する列の値で結合する場合に、結合後のデータテーブルに「対応フラグ」列を追加する。
Update, //主テーブルのデータを結合するテーブルのデータで更新する
// 各テーブルのオプション:
Drop Multiples(Boolean, Boolean), //重複する行を削除
Include Non Matches(Boolean, Boolean), // 一致しない行も含める
Preserve Main Table Order(), //主テーブルの順序を保持する
Output Table Name("name")); // 出力テーブル
結合を試すために、まず「Big Class.jmp」を2つに分割しましょう。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
part1 = dt << Subset(
Columns( :名前, :年齢, :Name("身長(インチ)") ),
Output Table Name( "Big Class 1" )
);
part2 = dt << Subset(
Columns( :名前, :性別, :Name("体重(ポンド)") ),
Output Table Name( "Big Class 2" )
);
sortedPart2 = part2 << Sort( By( :名前 ), Output Table Name( "並べ替えたBig Class" ) );
part1 << Join(
With( sortedPart2 ),
By Matching Columns( :名前 == :名前 ),
Preserve Main Table Order();
Output Table Name( "結合" );
);
結果テーブルには、各部分から1つずつ抽出された2つの「名前」変数のコピーがあり、これらを調べるとJoin(結合)の動作を理解できます。Robertの行が4つあることに注意してください。これは、各データテーブルにRobertの行が2つあり(元のテーブルにRobertの行が2つあった)、Join(結合)によってすべての可能な組み合わせが作成されたからです。
ヒント: 結合されたテーブルで元のデータテーブルと同じ順序を維持する(対応のある列で並べ替えるのではなく)には、Preserve Main Table Order()を含めます。このオプションにより、結合プロセスがスピードアップします。
引数の結合についての詳細は、『スクリプト構文リファレンス』の「JSLメッセージ」章を参照してください。