代码之家  ›  专栏  ›  技术社区  ›  Utsav

检查多个表中是否存在列

kdb
  •  0
  • Utsav  · 技术社区  · 8 年前

    我想检查一列是否存在于多个表中。 当我试着找一张桌子的时候,它是有效的。

    `tickerCol in cols tradeTable / (output is 1b) hence working perfectly
    `tickerCol in cols table2 / (output is 1b) hence working perfectly
    

    但当我奔跑

    `ticker in cols @' (tradeTable;table2) / (output is 0b, expected output 11b)
    

    对于上面的示例,两个表中都有ticker列(tradetable;table2)。

    2 回复  |  直到 8 年前
        1
  •  4
  •   JejeBelfort Ted Petrou    8 年前

    以下工作分别使用 ' :

    `ticker in ' cols each (tradeTable; table2)

    这将查找每个表中存在的列,然后对每个列列表执行检查以查找 `ticker 出现在这些列表中。

        2
  •  2
  •   JejeBelfort Ted Petrou    8 年前

    另一个答案中已提供解决方案。只是想解释一下为什么你的解决方案不起作用。

    假设我们有两张桌子 t1 (栏目) id 和 v1 ) t2 (栏目) 身份证件 和 v2 )

    现在,当我们跑步时:

        q) cols@'`t1`t2
    

    输出将是一个列表:

    (`id`v1;`id`v2)
    

    此列表有两个条目,其中每个条目都是一个列表。

    现在您要做的是在这个列表中查找列。

        q) `id in (`id`v1;`id`v2)   /output 0b
    

    因为名单上没有 身份证件 作为条目返回 0b .

    如果你搜索 `id`v1 这是你会得到的清单 1b 匹配第一个条目。

        q)  `id`v1 in (`id`v1;`id`v2)  / output 1b
    

    您需要在列表的每个条目中搜索您的列名。所以你在表达中唯一缺少的就是两者。这将起作用:

         q) `id in'cols@'`t1`t2   / output 11b
    

    在您的情况下,它将是:

         q) `ticker in ' cols@'`tradeTable`table2
    
    推荐文章