q / KDB使用功能选择选择多个符号

时间:2018-03-30 21:20:02

标签: kdb

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

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

但是,当我选择单个符号时,它会返回正确的数据

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

我的查询究竟出了什么问题?

2 个答案:

答案 0 :(得分:4)

在以下查询中,您未明确登记要搜索的值

fetch

使用?[d;enlist (in;`s;(),`v`b);0b;()] 多符号将修复查询:

enlist

?[d;enlist (in;`s;enlist `v`b);0b;()] 未明确与值一起使用时,KDB会将其视为列名并尝试在列之间运行条件(如enlist

另一个查询有效,因为columnA=columnB正在招募要列出的原子;这是()()不同的方式。

enlist

()vs enlist

如果是原子,它会归档相同的结果

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

但与列表

一起使用时会产生不同的结果
q)(),`a
,`a
q)enlist `a
,`a

答案 1 :(得分:1)

如果对等效的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