如何查询kdb+表以排除symbol列表中包含`1的记录?
咱们先拆解下你现有查询的问题,再给出正确的写法。
首先看你的表结构:
tab:([]a:((``1`2);`a;`b);c:1 2 3)
你的a列混合了symbol列表和单个symbol,这也是你最初的查询没达到预期的原因。
现有查询的问题:
第一个查询:
select from tab where a =1这个语句是判断a列的整个值是否完全等于1。但你的第一行a是列表``12,另外两行是单个symbola和b,没有任何一行满足a =1,所以返回空表,这显然不是你想要的结果。第二个查询:
select from tab where1 in raze a这个语句其实能筛选出a包含1的记录(也就是第一行),但你的目标是**过滤掉**这类记录(移除所有a里有1的行),逻辑刚好反了。另外,对你的当前数据来说raze是多余的——因为你的a值要么是单个symbol要么是一维列表,raze`不会改变它们的结构。
符合你目标的正确查询:
要过滤掉(排除)所有a列包含1的记录,只需要用not反转判断条件即可:
select from tab where not `1 in a
在你的表上执行这个语句,会得到a不包含1的两行:
a c ----- `a 2 `b 3
如果以后你的a列出现更深的嵌套列表(比如列表里套列表),可以用raze先扁平化再判断:
select from tab where not `1 in raze a
但针对你现在的表结构,用简单版的查询就足够了。
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

