我想在KDB中查询多个表。对于前者如何在KDB中编写以下SQL查询(我不擅长SQL,因此查询格式可能有误):
select from table1,table2 where table1.sym=table2.sym and table1.price>table2.price
我知道一些方法,例如。连接。但KDB中是否有与SQL相同的功能,只需在表格上使用点符号即可。
同样在SQL中,我们可以将上面的查询扩展到' n'表和过滤器的数量。我们可以在没有复杂表达的情况下在KDB中这样做吗?
答案 0 :(得分:1)
简短的回答是不,我害怕。
您一次只能查询1个表。你必须先加入。我不太了解SQL,但我确信SQL引擎无论如何都要在引擎盖下进行连接操作(?)所以如果有办法在q
中通过函数它将进行连接。
如果你想要提取列向量,你可以像这样索引到一个表(避免函数内的点符号):
table[`sym]
(将sym列作为向量,假设表没有键入) (注意在张开的桌子上这样做时要小心!)
例如,您可以在where子句中将其用于in
个查询。或者,如果您的表长度完全相同,您可以使用它来创建一个新的临时临时表(但这仍然是一种类型的连接!)
在没有使用通常的,
,lj
,uj
等的情况下,这就像你将得到的那样接近
答案 1 :(得分:0)
否。
SQL是一种声明性语言。您的查询告诉数据库您想要的内容,而不是如何做到。 SQL优化器检查您的查询,提供一棵运算符树,估算执行每个操作的成本,并尝试对树进行重新排序以使总成本最小化。
Q除了安装在键盘上的那个以外,没有数据库优化器。您必须确定操作顺序,并且必须以正确的顺序执行操作。
此外,Q对列进行操作,而不对行进行操作。因此table1.price>table2.price
毫无意义,除非table1和table2的长度完全相同。通常,人们通过重命名第二列,执行联接然后过滤生成的单个表来处理此问题。