如何在KDB + / Q中执行等效的SQL相关子查询?

时间:2016-10-02 19:41:02

标签: kdb correlated-subquery

我想在q-sql中执行以下sql:

update classes c set users=(select count(*) from learners u where u.classId=c.classId)

请注意,难点在于内部查询中的where子句涉及外部查询中的变量。

我能想到的最接近的想法是重命名内部查询中的类列(这是第一列)并尝试访问它们。

update users:(select count i from ( `LclassId xcol learners) where LclassId=classId) from classes

但这会导致错误'classId,这似乎意味着来自外部查询的classId 在内心没有。

以下是一些示例数据:

learners:([]classId:(1;2;3;4); userId: (1; 2; 3; 4))

classes:([]classId:1, 2, 3, 4)

1 个答案:

答案 0 :(得分:2)

q-sql update无法使用此语法。

尝试以下方法:

classes:classes lj select users:count i by classId from learners

编辑:(汇总时的其他更新语法)

对于此示例(所有classIds出现在学习者表中),您可以仅使用学习者表在技术上实现相同的结果。

classes:delete userId from update users:count i by classId from learners