Проверьте наличие столбца в нескольких таблицах - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу проверить, присутствует ли столбец в нескольких таблицах. Когда я пытаюсь на одном столе, это работает.

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

для приведенного выше примера столбец тикера присутствует в обеих таблицах (tradeTable; table2).

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Решение уже предоставлено в другом ответе. Просто пытаюсь объяснить, почему ваше решение не работает.

Допустим, у нас есть 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
0 голосов
/ 18 сентября 2018

Следующие работы с использованием каждого из них ':

`ticker in ' cols each (tradeTable; table2)

Это позволит найти столбцы, присутствующие в каждой из таблиц, а затем выполнить проверку каждого из списков столбцов, чтобы определить, присутствует ли в этих списках `ticker.

...