KDB+ / Q table 使用外键创建

KDB+ / Q table creation with foreign key

我的问题是关于使用 q 创建 table 并使用外键。我知道如何通过以下方式做到这一点

q)T1:([id:1 2 3 4 5]d1:"acbde")
q)T2:([id:1 2 3 4 5]f1:`T1 2 2 4 4)

但现在假设我想用 ! 运算符以这种方式翻转字典来创建 table

q)T3:1!flip ((`id`f1 )!((1 2 3 4 5);(2 2 2 4 4)))

如何使用这种创建 table.

的方式将外键设置为 table T1 主键

更新

嗯,我认为我上面的例子足以让我自己解决我的实际问题,但不幸的是它不是。

如果我有这个列表布局 A 和 B 怎么办

q)A:enlist 1 2 3 4 5
q)B:(enlist "abcde"), (enlist `v`w`x`y`z)
q)flip (`id`v1`v2)!(B,A)

如何将列表 A 作为 table T1 的外键?

更新 2

如果我 A 来自某个地方,而不是自己初始化它,我将如何实现它。我必须从列表中复制一份吗?[=​​16=]

您可以在列值列表中使用相同的语法:

q)T3:1!flip ((`id`f1 )!((1 2 3 4 5);(`T1 2 2 4 4)))
q)T3~T2
1b

更新:

同样对于这种情况,我们可以在列表中使用相同的语法 -

q)A:enlist`T1 2 3 4 5
q)meta flip (`id`v1`v2)!(B,A)
c | t f  a
--| ------
id| c
v1| s
v2| j T1

更新2:

对变量名称应用相同的语法:

q)A:1 2 3 4 5
q)meta flip (`id`v1`v2)!(B,enlist`T1$A)
c | t f  a
--| ------
id| c
v1| s
v2| j T1