我想检查多个表中是否存在列。当我尝试一张桌子时,它可以工作。
`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)。
以下工作使用每个 - 两个'
:
`ticker in ' cols each (tradeTable; table2)
这将找到每个表中存在的列,然后对每个列列表执行检查,以查找这些列表中是否存在`ticker
。
另一个答案已经提供了解决方案。只是试图解释为什么你的解决方案不起作用。
假设我们有2张桌子t1
(列id
和v1
)和t2
(列id
和v2
)。
现在我们跑的时候:
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