Kdbplus-q-language-joins

提供:Dev Guides
移動先:案内検索

Q言語-結合

*q* 言語では、提供される入力テーブルと必要な結合テーブルの種類に基づいて、さまざまな種類の結合があります。 結合は、2つのテーブルのデータを結合します。 外部キーの追跡に加えて、テーブルを結合する4つの方法があります-
  • 簡単な結合
  • Asof Join
  • 左結合
  • 組合加入

ここで、この章では、これらの各結合について詳しく説明します。

単純結合

単純な結合は、カンマ「、」で実行される最も基本的な種類の結合です。 この場合、2つのテーブルは type conformant である必要があります。つまり、両方のテーブルは同じ順序で同じ列数と同じキーを持っています。

table1,:table2/table1 is assigned the value of table2

同じ長さのテーブルにカンマごとの結合を使用して、横方向に結合できます。 ここでテーブルの1つにキーを付けることができます。

Table1, `Table2

Asof Join(aj)

あるテーブルのフィールドの値を別のテーブルの時点で取得するために使用される最も強力な結合です。 一般的に、各取引の時点で一般的な入札と依頼を得るために使用されます。

一般的な形式

aj[joinColumns;tbl1;tbl2]

例えば、

aj[`sym`time;trade;quote]

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([]a:(2 3 4);b:(3 4 5); c:( 4 5 6))

q)show aj[`a`b;tab1;tab2]

 a  b  d  c
-------------
 1  2  6
 2  3  7  4
 3  4  8  5
 4  5  9  6

左結合(lj)

これはajの特殊なケースであり、2番目の引数はキー付きテーブルであり、1番目の引数には正しい引数のキーの列が含まれます。

一般的な形式

table1 lj Keyed-table

q)/Left join- syntax table1 lj table2 or lj[table1;table2]

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([a:(2 3 4);b:(3 4 5)]; c:( 4 5 6))

q)show lj[tab1;tab2]

 a  b  d  c
-------------
 1  2  6
 2  3  7  4
 3  4  8  5
 4  5  9  6

ユニオン結合(uj)

異なるスキーマを持つ2つのテーブルの結合を作成できます。 基本的には、単純な結合(、)の拡張です

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([]a:(2 3 4);b:(3 4 5); c:( 4 5 6))

q)show uj[tab1;tab2]

 a  b  d  c
------------
 1  2  6
 2  3  7
 3  4  8
 4  5  9
 2  3     4
 3  4     5
 4  5     6

キー付きテーブルでujを使用している場合、主キーは一致する必要があります。