我正在尝试使用函数选择选择多个符号,但它会抛出错误:
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
我的查询究竟出了什么问题?
答案 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