检查多个表中是否存在列

问题描述 投票:0回答:2

我想检查多个表中是否存在列。当我尝试一张桌子时,它可以工作。

`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)。

kdb
2个回答
4
投票

以下工作使用每个 - 两个'

`ticker in ' cols each (tradeTable; table2)

这将找到每个表中存在的列,然后对每个列列表执行检查,以查找这些列表中是否存在`ticker


2
投票

另一个答案已经提供了解决方案。只是试图解释为什么你的解决方案不起作用。

假设我们有2张桌子t1(列idv1)和t2(列idv2)。

现在我们跑的时候:

    q) cols@'`t1`t2

输出将是列表的列表:

(`id`v1;`id`v2)

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

现在您正在尝试在此列表中查找列。

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

由于该列表没有id作为条目,它返回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
© www.soinside.com 2019 - 2024. All rights reserved.