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

时间:2016-10-17 15:53:16

标签: kdb

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

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

我想查找`book2是books列中的书籍之一的所有行,我该怎么做?所以在上面的例子中,我希望返回第1行和第5行。我使用“in”运算符尝试了各种各样的事情,但要么得到错误要么没有结果,例如: -

public static void main(String[] args) {
    String[] columnToken = {"No. consecutivo", "Token", "Lexema", "No. de linea"};
    String[] columnError = {"No. consecutivo", "Error", "No. de linea"};

    Object[][] datac1= {};
    Object[][] datac2= {};

    JTable tabTokens = new JTable(datac1, columnToken);
    JTable tabError = new JTable(datac2, columnError);

    JFrame frameTokens = new JFrame("JTable Tokens Display");
    JFrame frameError = new JFrame("JTable Errors Display");

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());

    JScrollPane tokenTabContainer = new JScrollPane(tabTokens);
    JScrollPane errorTabContainer = new JScrollPane(tabError);

    panel.add(tokenTabContainer, BorderLayout.CENTER);
    frameTokens.getContentPane().add(panel);

    panel.add(errorTabContainer, BorderLayout.CENTER);
    frameError.getContentPane().add(panel);

    for(int i=0; i<4; i++) {
        DefaultTableModel token100 = (DefaultTableModel) tabTokens.getModel();
        token100.addRow(new Object[]{"Hola", 100, 196, "adios"});

        DefaultTableModel token101 = (DefaultTableModel) tabTokens.getModel();
        token101.addRow(new Object[]{"Hola", 100, 196, "adios"});

        DefaultTableModel token102 = (DefaultTableModel) tabTokens.getModel();
        token102.addRow(new Object[]{"Hola", 100, 196, "adios"});
    }

    frameTokens.pack();
    frameTokens.setVisible(true);
    //frameError.pack();
    //frameError.setVisible(true);
}

3 个答案:

答案 0 :(得分:3)

select from table where `book2 in/:books

有效,使用每个副词。

答案 1 :(得分:2)

select from table where `book2 in'books

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

答案 2 :(得分:1)

另一个有用的变体,您希望将任何/所有输入书匹配到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