如何查询一列为列表的KDB表?

如何查询一列为列表的KDB表?,kdb,Kdb,我在KDB中有一个表,其中一列是符号列表,例如:- 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) 我想找到所

我在KDB中有一个表,其中一列是符号列表,例如:-

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)
我想找到所有的行,其中“book2”是“books”列中的一本书,我该怎么做?因此,在上面的示例中,我希望返回第1行和第5行。我使用“in”操作符尝试了各种方法,但要么出现错误,要么没有结果,例如:-

q)select from books where `book2 in books
clientTradeId| book
-------------| ----
q)select from books where enlist `books2 in books
'length
这两个词都使用了副词,请在此处阅读更多信息:

从“book2 in/:books”所在的表中选择


有效,使用eachright副词。

另一个有用的变体,您希望将任何/所有输入图书与
图书
列匹配:

1) 这将返回同时包含
book2
book5
的行(使用
all-each
):

2) 这将返回包含
book2
book4
的行(每个行使用
any


谢谢,这也行。一个人为什么会选择一个副词而不是另一个?e、 g.业绩?可读性?在我看来,在这种情况下,每个右(/:)的语法更好。两个(')都用于在左列表和右列表中具有相同数量项的逐项操作。在另一个示例中,左侧列表中只有一个项目(`book2),但右侧列表(book列)中有多个项目——然而,kdb恰好在单个项目左侧列表的情况下允许它。例如,如果您在右侧的每个列表中查找一对,则两者都不起作用。例如,将“12英寸/:((12;34);(56;78);(12;910))”与“12英寸”((12;34);(56;78);(12;910))”进行比较。这一切都取决于用例,尽管每个用例都使用稍微少一点的RAM(以字节为单位)因为它更简洁——正如@terrylynch在上面所说的那样,eachright的语法更好,因为它允许您使用列表作为左参数——例如:
Valid:select from table where min each
book1
book2 in/:books
Invalid:select from table where min each
book1
book2 in'books
select from table where `book2 in'books
q)select from table where  all each `book2`book5 in/:books
id| books
--| -----------
5 | book2 book5
q)select from table where  any each `book4`book5 in/:books
id| books
--| ------------
4 | ,`book4
5 | `book2`book5