在 kdb+ 中翻转 select 和索引访问 table 的不同结果

Different results of flip on select and on index-accessed table in kdb+

q 会话中,我制作了一个键控 table t:

q)/KDB+ 3.6 2018.05.17
q)f:flip (`a`b)!(1 2 3;4 5 6)
q)k:flip (enlist `k)!(enlist 101 102 103)
q)t:k!f;t
k  | a b
---| ---
101| 1 4
102| 2 5
103| 3 6

然后我尝试进行查询,结果很好:

q)select a,b from t where k=101
a b
---
1 4
q)flip select a,b from t where k=101
a| 1
b| 4
q)flip flip select a,b from t where k=101
a b
---
1 4

但是没有 select-syntax 这会产生错误:

q)t[101]
a| 1
b| 4
q)flip t[101]
'rank
  [0]  flip t[101]
       ^

为什么我不能简单地 flip 得到与 select 相同数据类型的相同结果?

q)type flip select a,b from t where k=101
99h
q)type t[101]
99h

因为字典t[101]的元素不是列表,而是原子。因此翻转原子列表失败。

首先将每个元素附加到一个空列表中是可行的。

q)(),/:t[101]
a| 1
b| 4

不一定是您想做的事情。对于给定的字典输出,您可能想要的解决方案是 enlist

q)enlist t[101]
a b
---
1 4

另一种方法是使用 table 查找而不是使用原子查找:

q)t[([]k:(),101)]
a b
---
1 4

这相当于 select a,b from t where k=101