2

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

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

但是现在可以说我想用!操作员以这种方式翻转字典来创建表

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

如何使用这种创建表的方式将外键设置为表 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 作为表 T1 的外键?

更新 2

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

4

1 回答 1

4

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

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

更新:

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

q)A:enlist`T1$1 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
于 2015-06-05T15:23:58.580 回答