首页 文章

如何查询KDB表,其中一列是列表?

提问于
浏览 1319
3

我在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是书籍栏目中的一本书,我该怎么做?所以在上面的例子中,我希望返回第1行和第5行 . 我使用“in”运算符尝试了各种各样的事情,但要么得到错误要么没有结果,例如: -

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

3 回答

  • 3

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

    1)这将返回同时具有 book2book5 (使用 all each )的行:

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

    2)这将返回具有 book2book4 的行(使用 any each

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

    select from table wherebook2 in/:books`

    是有效的,使用每个副词 .

  • 1
    select from table where `book2 in'books
    

    这会使用每个副词,在这里阅读更多相关内容:http://code.kx.com/q4m3/6_Functions/#672-each-both

相关问题