首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实用工具,除了kdb中的表之外。

实用工具,除了kdb中的表之外。
EN

Stack Overflow用户
提问于 2020-02-11 16:29:58
回答 2查看 591关注 0票数 0

除了kdb中的list函数之外,我们还可以查找一个列表中存在的元素,而不是另一个列表中的元素,同样,我们有什么实用工具可以根据列提取一个表中的行而不是另一个表中的行呢?

我有两张桌子:

代码语言:javascript
复制
l:([]c1:`a`b`c`d;c2:10 20 30 40)
r:([]c1:`a`a`a`b`b;c3:100 200 300 400 50)

因为,对于表1中的列c1,表r的列c1中不存在行c d

我们在kdb中有什么实用工具,可以像下面这样用于输出吗?

代码语言:javascript
复制
c1 c2
-----
c  30
d  40

我用-

代码语言:javascript
复制
select from l where c1 in l[`c1] except r`c1

但是,我正在寻找更好的/优化的解决方案/实用程序,以获得相同的输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-11 17:09:37

我不认为当前的实现有什么问题,但您可以在键控表上使用drop (又名_),以获得更简洁的方法:

代码语言:javascript
复制
q)#[1#`c1;r]_1!l
c1| c2
--| --
c | 30
d | 40

当它们的“键”超过一列时,这也是非常整洁的:

代码语言:javascript
复制
l0:([]c0:`x`y`z`w;c1:`a`b`c`d;c2:10 20 30 40)
r0:([]c0:`y`x`x`x`y;c1:`a`a`a`b`b;c3:100 200 300 400 50)

q)#[`c0`c1;r0]_2!l0
c0 c1| c2
-----| --
z  c | 30
w  d | 40
票数 3
EN

Stack Overflow用户

发布于 2020-02-11 17:23:58

一种更实用的形式是:

代码语言:javascript
复制
{cl:cols[x]inter cols y;x where not(cl#x)in cl#y}[l;r]
c1 c2
-----
c  30
d  40

如果您不知道要匹配的列,因为cols[x] inter cols[y]在开始时获得了两个表之间的公共科尔,那么这个方法应该可以工作。它也不需要键控列也能工作。

尽管在这种具体情况下,以下内容可能会更快一些:

代码语言:javascript
复制
l where not l[`c1] in r[`c1] 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60173431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档