KDB函数式select多符号查询报错原因咨询
问题排查:Kdb+函数式Select多符号IN查询报错
我来帮你理清这个问题的根源~
错误原因
你触发的'b错误,本质是符号列表的写法不符合Kdb+语法规则。在你的查询语句里:
?[d;enlist (in;`s;(),`v`b);0b;()]
(),vb这部分会被Kdb+错误解析:它会把v当成一个函数,尝试执行v[b](调用v函数并传入b作为参数),但v只是一个普通符号,并非函数,因此直接触发了报错。
而单个符号时(),v能正常工作,是因为这会被解析为(),v——也就是把空列表和符号v拼接,得到一个单元素列表,v,刚好符合in条件对右侧值的要求(原子或列表)。
正确写法
要在in条件中传入多个符号,直接使用符号列表即可,不需要额外用,()包裹。正确的查询语句应该是:
?[d;enlist (in;`s;`v`b);0b;()]
执行这个语句会返回所有s列值为v或b的行(也就是你的整个测试表,因为原始数据的s列只有这两个符号)。
拓展:动态符号列表
如果你的符号列表是动态生成的(比如来自变量),可以直接传入变量:
syms:`v`b ?[d;enlist (in;`s;syms);0b;()]
这种写法同样能正常工作,灵活性更高。
内容的提问来源于stack exchange,提问作者user9475848
相关产品推荐
相关产品推荐

