📅  最后修改于: 2020-11-03 06:47:33             🧑  作者: Mango
在q语言中,根据提供的输入表和所需的联接表的类型,我们有不同类型的联接。联接合并了两个表中的数据。除了外键追踪外,还有四种其他方法可以联接表-
在本章中,我们将在此详细讨论每个连接。
简单连接是最基本的连接类型,用逗号“,”执行。在这种情况下,两个表必须是类型一致的,即两个表都具有相同顺序的相同列数和相同键。
table1,:table2 / table1 is assigned the value of table2
对于相同长度的表,我们可以使用逗号每个联接横向连接。可以在其中键入其中一张表,
Table1, `Table2
它是最强大的联接,用于在一个表中同时获取另一个表中的字段的值。通常,它用于获取每次交易时的主要出价和要价。
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
这是aj的特例,其中第二个参数是键控表,第一个参数包含右参数的键的列。
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
它允许创建具有不同模式的两个表的联合。它基本上是对简单联接(,)的扩展
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,则主键必须匹配。