使用外键

时间:2015-06-05 15:13:55

标签: database foreign-keys kdb q-lang

我的问题是用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来自某个地方,而不是自己初始化,我将如何实施呢?我是否必须从列表中复制一份?

1 个答案:

答案 0 :(得分: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

<强> UPDATE2:

应用于变量名的相同语法:

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