首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用列表更新列的KDB查询

使用列表更新列的KDB查询
EN

Stack Overflow用户
提问于 2021-11-24 11:01:39
回答 4查看 175关注 0票数 1

我需要用一个只有一个符号的列表来更新一个列。低于1个不起作用。请注意,city是一个包含符号列表的列。

代码语言:javascript
运行
复制
update city: enlist `Lodnon from `user where id in (1,2,3);
EN

回答 4

Stack Overflow用户

发布于 2021-11-24 11:13:24

您当前的查询非常接近。您希望提供一个原子(即`london ),而不是列表:

update city:`london from user where id in 1 2 3

您建议的查询将失败,并出现长度错误(假设在1 2 3中有3条记录具有id,您将提供一个包含1个元素的列表来替换3个列条目)。

编辑:要获得实际的列值,您必须确保city列包含列表(即,将关键字meta应用于您的表应该在cityt列中返回大写S。

假设您的city列在运行meta user时当前有一个很小的s,您可以通过运行以下命令来更新它:

update city:enlist each city from `user

然后,以下内容将进行您想要的更改:

update city:city:\:enlist`london from user where id in 1 2 3

票数 4
EN

Stack Overflow用户

发布于 2021-11-24 11:38:09

如果你希望它仍然是一个列表,你可以这样做

代码语言:javascript
运行
复制
{update city:(x)#enlist `london from `user where id in 1 2 3}count select from t where id in 1 2 3

或者,要整理它,您可以使用

代码语言:javascript
运行
复制
update city:count[i]#enlist `London from t where id in 1 2 3

由于where子句中的过滤,计数中的i将与列表的长度相同。

票数 1
EN

Stack Overflow用户

发布于 2021-11-26 07:13:18

或者,您可以使用?[boolean_list;if_true;if_false]操作符,如下所示:

代码语言:javascript
运行
复制
/ this is just to create a test table
t:([] id:(1;2;3;4); city:4#`)

/ check if each element of t`id is in (1;2;3)
/ 1) `London if true, ` if false
/ 2) assign t[`city]
t[`city]:?[in[t`id;(1;2;3)];`London;`]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70094913

复制
相关文章

相似问题

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