KDB如何通过比较两表value列筛选table1符合条件的行
问题原因
你原先的查询不生效是因为 exec value from table2 会返回table2的value列组成的列表 5 15 18,在q语言中,标量和列表做比较时会逐元素返回布尔值列表,where子句无法直接用这类多值布尔结果做行过滤。
正确查询语句
按你给出的预期输出,你需要判断table1的当前行value是否小于等于任意一个table2的value即可,对应两种可用写法:
- 通用场景写法(支持任意匹配规则调整)
select from table1 where any value <= exec value from table2
如果后续你需要调整规则为「table1.value小于等于所有table2.value」,把上述语句中的any替换为all即可。
- 当前场景简化写法(性能更优)
因为你的需求等价于判断table1.value小于等于table2.value的最大值,直接取最大值做比较只需遍历一次table2的value列,数据量大时性能更好:
select from table1 where value <= max exec value from table2
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

