【问题标题】:KDB Selecting rows of one table that have matching keys in a second tableKDB 选择一个表中在第二个表中具有匹配键的行
【发布时间】:2014-10-10 19:11:11
【问题描述】:

愚蠢的 kdb 问题。我想根据 t2 中的哪些键与 t1 中的列匹配从 t1 中选择行。在下面的示例中,t1 中出现在 t2 中的唯一 datesym 组合是 d1s3 和 d3s4。因此,我的结果表 t3 应该只有这两行。

t1:([]date:`d1`d2`d3`d3;sym:`s1`s2`s3`s4;price:100 200 300 400)
date    sym price
d1  s1  100
d2  s2  200
d3  s3  300
d3  s4  400


t2:2!([]date:`d1`d3`d3`d4;sym:`s1`s2`s4`s9;var1:`Blah`Blah`Blah`Blah;var2:`Blah`Blah`Blah`Blah)
    date sym | var1 var2
    d1  s1  Blah    Blah
    d3  s2  Blah    Blah
    d3  s4  Blah    Blah
    d4  s9  Blah    Blah


t3:([]date:`d1`d3;sym:`s1`s4;price:100 400)
date    sym price
d1  s1  100
d3  s4  400

这样做的一个愚蠢的方法是

delete var1,var2,... from t1 ij t2

有没有一种更简洁的方法,不需要手动删除 t2 的所有非键列?

【问题讨论】:

    标签: join key kdb


    【解决方案1】:

    一个选项是

    q)select from t1 where ([] date;sym) in key t2
    date sym price
    --------------
    d1   s1  100
    d3   s4  400
    

    【讨论】:

      【解决方案2】:

      另一种方法,以防您的 t2 被很多列键入并且您不想输入它们

      t1 where (keys[t2]#t1) in key t2
      

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 2022-09-23
        • 2021-03-12
        • 1970-01-01
        相关资源
        最近更新 更多