【问题标题】:KDB select whereKDB 选择在哪里
【发布时间】:2018-02-23 00:24:54
【问题描述】:

我有一张桌子

t:flip `dt`id`data ! (`d1`d1`d2`d2`d3`d3; 0 1 0 1 0 1; 100 200 100 300 0 200)

从其他一些查询中,我有一个表

s:flip `dt`id ! (`d1`d2`d2`d3; 0 0 1 1)

如何从 t 中选择,使其返回 dt 和 id 组合在 s 中的所有条目,所以返回

flip `dt`id`data ! (`d1`d2`d2`d3; 0 0 1  1; 100 100 300 200)

【问题讨论】:

    标签: kdb


    【解决方案1】:

    您可以在表到表操作上使用in,因此只需从 t 中所需的列创建一个表,然后使用 in 搜索相应记录。只要左参数和右参数中的表列和类型相同,in 就会按预期生成一个布尔列表。

    q)select from t where ([]dt;id) in s
    dt id data
    ----------
    d1 0  100
    d2 0  100
    d2 1  300
    d3 1  200
    

    【讨论】:

    • 谢谢,效果很好。只是为了理解这一点......这会创建一个字典并检查该字典是否在表中?出于好奇,如果它可以做到这一点,为什么我不能这样做......“`dt`id!(`d1;0j)in s”
    • 这会从 dt 和 id 列创建一个表,然后对这两个表应用 in 操作。关于你的问题 - 解释器从右到左阅读,所以你的陈述实际上在做的是 (`d1;0j) in s 在其他任何事情之前(因此你会出错)。你可以成功运行(`dt`id!(`d1;0j)) in s
    • 啊,谢谢。从右到左的东西经常让我着迷
    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多