首页 文章

在KDB中查询多个表

提问于
浏览
2

我想在KDB中查询多个表 . 对于前者如何在KDB中编写以下SQL查询(我不擅长SQL,因此查询格式可能有误):

select from table1,table2 where table1.sym=table2.sym and table1.price>table2.price

我知道一些方法,例如 . 连接 . 但是KDB中是否有与SQL相同的功能,它只是在表上使用点表示法 .

同样在SQL中,我们可以将上面的查询扩展到'n'个表和过滤器 . 我们可以在没有复杂表达的情况下在KDB中这样做吗?

2 回答

  • 0

    简短的回答是不,我害怕 .

    您一次只能查询1个表 . 你必须先加入 . 我不确定SQL引擎是否正在进行连接操作以便能够执行此操作(?)所以如果有一种方法可以通过函数在 q 中执行此操作,那么它将进行连接 .

    如果你想要提取列向量,你可以像这样索引到一个表(避免函数内的点符号):

    table[`sym]
    

    (将sym列作为向量,假设表没有键入)(注意在张开的表上执行此操作时要小心!)

    例如,您可以在where子句中将其用于 in 查询 . 或者,如果您的表长度完全相同,您可以使用它来创建一个新的临时临时表(但这仍然是一种类型的连接!)

    那个's as close as you'将不使用通常的 ,ljuj

  • 1

    没有 .

    SQL是一种声明性语言 . 您的查询告诉数据库您想要什么,而不是如何操作 . SQL优化器检查您的查询,提供运算符树,估计执行每个操作的成本,并尝试重新排序树以最小化总成本 .

    Q除了坐在键盘上的数据库优化器之外没有数据库优化器 . 您必须确定操作的顺序,并且必须按正确的顺序执行它们 .

    此外,Q对列进行操作,而不是对行进行操作 . 所以 table1.price>table2.price 没有意义,除非table1和table2的长度完全相同 . 通常人们通过重命名第二列,执行连接,然后过滤生成的单个表来处理此问题 .

相关问题