How to query KDB table where one column is a list?

六月ゝ 毕业季﹏ 提交于 2019-12-07 11:48:18

问题


I have a table in KDB where one of the columns is a list of symbols, for example:-

q)table:([id:1 2 3 4 5] books:((`book1`book2);(enlist `book6);(enlist`book3);(enlist`book4);(`book2;`book5)))
q)table
id| books
--| ------------
1 | `book1`book2
2 | ,`book6
3 | ,`book3
4 | ,`book4
5 | `book2`book5
q)

I want to find all the rows where `book2 is one of the books in the books column, how do I do this? So in the example above, I'd expect the 1st and 5th rows to be returned. I have tried various things using the "in" operator but either get an error or no results, for example :-

q)select from books where `book2 in books
clientTradeId| book
-------------| ----
q)select from books where enlist `books2 in books
'length

回答1:


select from table where `book2 in'books

This utilises the adverb each-both, read more about it here: http://code.kx.com/q4m3/6_Functions/#672-each-both




回答2:


select from table where `book2 in/:books

is valid, using the eachright adverb.




回答3:


Another useful variation where you want to match any/all of the input books to the books column :

1) This will return the rows which have both book2 and book5 (using all each):

q)select from table where  all each `book2`book5 in/:books
id| books
--| -----------
5 | book2 book5

2) This will return the rows which have either book2 or book4 (using any each)

q)select from table where  any each `book4`book5 in/:books
id| books
--| ------------
4 | ,`book4
5 | `book2`book5


来源:https://stackoverflow.com/questions/40090753/how-to-query-kdb-table-where-one-column-is-a-list

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!