q/KDB 使用函数选择多个符号 select

q/KDB Selecting multiple symbols using functional select

我正在尝试使用函数 select select 多个符号,但它抛出错误:

d:([] s:5#`v`b ; p:5?10)
?[d;enlist (in;`s;(),`v`b);0b;()]
'b

然而,当我 select 单个符号时,它 returns 正确数据

?[d;enlist (in;`s;(),`v);0b;()]
s p
---
v 8
v 4
v 2

我的查询到底有什么问题?

如果您 运行 解析等效的 q-sql 表达式,您将在解析树中看到 ,

q)parse"select from d where s in`v`b"
?
`d
,,(in;`s;,`v`b)
0b
()

这意味着 enlist,因此如果您将其替换为查询应该有效:

q)?[d;enlist(in;`s;enlist`v`b);0b;()]
s p
---
v 8
b 1
v 9
b 5
v 4
q)?[d;enlist(in;`s;enlist`v);0b;()]
s p
---
v 8
v 9
v 4

在以下查询中,您没有明确列出要搜索的值

?[d;enlist (in;`s;(),`v`b);0b;()]

使用 enlist 多重符号将修复查询:

?[d;enlist (in;`s;enlist `v`b);0b;()]

enlist 未明确与值一起使用时,KDB 将其视为列名并尝试 运行 列之间的条件(如 columnA=columnB

另一个查询有效,因为 () 在某种程度上是在征集要列出的原子;这就是 ()enlist 的不同之处。

?[d;enlist (in;`s;(),`v);0b;()]

() vs 入伍

在 atoms 的情况下,它存档相同的结果

q)(),`a
,`a
q)enlist `a
,`a

但与列表一起使用时会给出不同的结果

q)type (),`a`b
11h
q)type enlist `a`b
0h