news 2026/6/15 16:47:17

在postgres和duckdb中比较两个数组并只挑选不匹配的元素

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在postgres和duckdb中比较两个数组并只挑选不匹配的元素

直接用-运算符是不行的, 网上用AI生成的文档很不负责地误导大家。

select array[1,2]-array[1]; 错误: 操作符不存在: integer[] - integer[] 第1行select array[1,2]-array[1]; ^ 提示: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

duckdb 也会报错

select [1,2] -[1]; Binder Error: No function matches the given name and argument types '-(INTEGER[], INTEGER[])'. You might need to add explicit type casts.

文档中有array_remove函数,但一次只能删除一个元素

postgres=# select array_remove(ARRAY[1,2,3,2], 2); array_remove -------------- {1,3}

还是人类的回答靠谱, 将数组转成表的行,再用array()函数转回来。

postgres=# select unnest(array[1,2,3]) except select unnest(array[1,2]); unnest -------- 3 (1 行记录) postgres=# select array(select unnest(array[1,2,3]) except select unnest(array[1,2])); array ------- {3} (1 行记录)

此法在duckdb也可以用

select array(select unnest(array[1,2,3]) except select unnest(array[1,2])); ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ (SELECT CASE WHEN ((array_agg(COLUMNS(*)) IS NULL)) THEN (list_value()) ELSE array_agg(COLUMNS(*)) END FROM ((SEL… │ │ int32[] │ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ [3] │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

除了上面的方法,duckdb还可以用list_filter配合contains函数。

select list_filter([3, 4, 5], lambda x : not contains([2,4],x )); ┌─────────────────────────────────────────────────────────────────────────────────────────────┐ │ list_filter(main.list_value(3, 4, 5), (lambda x: (NOT contains(main.list_value(2, 4), x)))) │ │ int32[] │ ├─────────────────────────────────────────────────────────────────────────────────────────────┤ │ [3, 5] │ └─────────────────────────────────────────────────────────────────────────────────────────────┘
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:47:37

Shutter Encoder终极指南:从视频转换新手到专业处理高手

还在为视频格式不兼容而烦恼?想要快速处理大量媒体文件却找不到合适的工具?今天我要为你详细介绍一款真正改变游戏规则的专业视频处理工具——Shutter Encoder。这款基于FFmpeg的强大软件,让复杂的视频操作变得前所未有的简单。🎬…

作者头像 李华
网站建设 2026/6/15 12:52:34

23、让网站页面进入搜索引擎的全面指南

让网站页面进入搜索引擎的全面指南 在当今数字化的时代,拥有一个网站只是第一步,让网站的页面能够被搜索引擎收录并展示在搜索结果中才是关键。以下将详细介绍如何让你的网页进入搜索引擎,涵盖了多种方法和具体操作步骤。 吸引搜索引擎关注的三种途径 要想让搜索引擎发现…

作者头像 李华
网站建设 2026/6/15 12:51:58

MDB Tools:轻松读取和转换Access数据库的必备工具集

MDB Tools:轻松读取和转换Access数据库的必备工具集 【免费下载链接】mdbtools 项目地址: https://gitcode.com/gh_mirrors/mdb/mdbtools MDB Tools是一个功能强大的开源工具集,专门用于读取和导出Microsoft Access数据库文件(.mdb格…

作者头像 李华
网站建设 2026/6/15 12:35:38

快速搭建个人Webmail系统:Roundcube Mail完整实践指南

快速搭建个人Webmail系统:Roundcube Mail完整实践指南 【免费下载链接】roundcubemail The Roundcube Webmail suite 项目地址: https://gitcode.com/gh_mirrors/ro/roundcubemail Roundcube Mail作为一款功能强大的开源Webmail客户端,让用户能够…

作者头像 李华
网站建设 2026/6/15 16:37:03

手把手教程:应对 Elasticsearch 8.x es面试题中的 Mapping 设计

如何设计一个“不会翻车”的 Elasticsearch 映射?聊聊那些面试官最爱问的 Mapping 细节你有没有遇到过这种情况:线上日志系统突然变慢,GC 频繁报警,排查一圈发现不是机器资源不够,而是——索引字段爆炸了(m…

作者头像 李华
网站建设 2026/6/10 15:45:10

ComfyUI-Impact-Pack中BooleanWidget2组件错误诊断与修复指南

ComfyUI-Impact-Pack中BooleanWidget2组件错误诊断与修复指南 【免费下载链接】ComfyUI-Impact-Pack 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Impact-Pack 在使用ComfyUI-Impact-Pack进行AI工作流设计的过程中,许多用户都曾遭遇过这样一个棘手…

作者头像 李华