0

官方文档只介绍了 join 的基本用法。但是可以看到左连接lj是如何实现的:

q)lj
k){.Q.ft[,\:[;y];x]}
q).Q.ft
k){$[$[99h=@t:v y;98h=@. t;0];[n:#+!y;n!x 0!y];x y]}

因此可以找到另一个用例(dict,keyed table)

/(dict,dict): add columns
d1:     `a`b  ! 1 2
d2:       `b`c!   3 4
(d1,d2)~`a`b`c! 1 3 4

/(table,table): add rows
t1:(enlist `a`b!1 2)
t2:(enlist `a`b!3 4)
(t1,t2) ~ (`a`b!1 2;`a`b!3 4)

/(keyed table,keyed table): add rows
k1:(`a`b!1 2;`a`b!3 5)!(`c`d`e!10 20 30;`c`d`e!40 50 60)
k2:(`a`b!1 2;`a`b!3 4)!(`c`d`e!15 25 35;`c`d`e!45 55 65)
(k1,k2)
/ a b| c  d  e
/ ---| --------
/ 1 2| 15 25 35
/ 3 5| 40 50 60
/ 3 4| 45 55 65

/(dict,keyed table): add cols
k2:(`a`b!1 2;`a`b!3 4)!(`c`d`e!15 25 35;`c`d`e!45 55 65)
/                  a b| c  d  e
/                  ---| --------
d1:     `a`b`c`d  !1 2  10 20
/                  1 2| 15 25 35
/                  3 4| 45 55 65
(d1,k2)~`a`b`c`d`e!1 2  15 25 35

文档中也有一些案例,\:,'提到的案例。但是知道表是变相的字典列表,它们只是上面列出的那些的衍生物。

问题是 - 这个强大的函数 join 是否还有其他用例(具有不同的参数类型),

4

1 回答 1

1

您已经介绍了 q 中的主要数据结构,尽管我认为另一种方式可能最初对新用户并不明显,给定函数是 q 中的第一类对象,您可以对它们使用 join,这对于创建解析树很有用.

例如,

t:([]col1:10?10;col2:10?10;col3:10?10)

Lets say you were working with a functional query, and you wanted to select the sum of col1 and col2 individually, you could write

?[t;();0b;`col1`col2!((sum;`col1);(sum;`col2))]

though slightly more compactly, which will become even more compact the more columns you include

?[t;();0b;`col1`col2!sum,/:`col1`col2]

Shorter again is below, but not due to using joins

?[t;();0b;{x!sum,/:x}`col1`col2]
于 2020-06-25T13:06:12.960 回答