在KDB中查询多个表

时间:2014-09-01 08:07:27

标签: database kdb

我想在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)

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

您一次只能查询1个表。你必须先加入。我不太了解SQL,但我确信SQL引擎无论如何都要在引擎盖下进行连接操作(?)所以如果有办法在q中通过函数它将进行连接。

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

table[`sym]

(将sym列作为向量,假设表没有键入) (注意在张开的桌子上这样做时要小心!)

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

在没有使用通常的,ljuj等的情况下,这就像你将得到的那样接近

答案 1 :(得分:0)

否。

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

Q除了安装在键盘上的那个以外,没有数据库优化器。您必须确定操作顺序,并且必须以正确的顺序执行操作。

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