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
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
select from table where `book2 in/:books
is valid, using the eachright adverb.
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