news 2026/4/3 3:50:46

在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/3/27 15:24:31

18、搜索引擎优化:技巧、内容与风险应对

搜索引擎优化:技巧、内容与风险应对 在搜索引擎优化(SEO)的世界里,有许多策略和技巧可以帮助网站提升排名,但同时也伴随着各种风险。了解这些策略的正确使用方法以及可能面临的惩罚,对于网站所有者来说至关重要。 一、隐藏技术的使用与风险 在SEO领域,隐藏(cloaking…

作者头像 李华
网站建设 2026/4/1 11:57:35

Python Steam API快速入门:5分钟构建游戏数据分析应用

Python Steam API快速入门:5分钟构建游戏数据分析应用 【免费下载链接】steamapi An unofficial object-oriented Python library for accessing the Steam Web API. 项目地址: https://gitcode.com/gh_mirrors/st/steamapi Steam平台作为全球最大的数字游戏…

作者头像 李华
网站建设 2026/3/21 1:24:30

34、搜索引擎优化:进阶指南与技巧

搜索引擎优化:进阶指南与技巧 在当今数字化的时代,搜索引擎优化(SEO)对于网站的可见性和流量至关重要。本文将深入探讨视频和图像排名的优化方法,以及搜索结果页面上不同类型结果的特点和优化策略。 视频与图像排名优化 视频排名 为了提高视频在视频上传网站上的排名…

作者头像 李华
网站建设 2026/3/12 15:07:20

Vue拖拽组件终极指南:快速实现元素拖动和大小调整功能

Vue拖拽组件终极指南:快速实现元素拖动和大小调整功能 【免费下载链接】vue-drag-resize Vue2 && Vue3 Component for resize and drag elements 项目地址: https://gitcode.com/gh_mirrors/vu/vue-drag-resize 还在为Vue项目中复杂的交互需求而烦恼…

作者头像 李华
网站建设 2026/4/1 5:51:02

Dify平台在航空航天术语翻译中的专业词汇保持精度

Dify平台在航空航天术语翻译中的专业词汇保持精度 在航空航天工程领域,一个词的误译可能带来连锁性的技术误解——“迎角”若被错译为“俯仰角”,轻则导致手册理解偏差,重则影响飞行操作决策。随着国产大飞机C919、长征系列火箭等重大项目的持…

作者头像 李华
网站建设 2026/4/3 3:03:42

EXIF-js 完整指南:如何在浏览器中快速提取图像元数据信息

EXIF-js 是一个专门用于从图像文件中读取EXIF元数据的JavaScript库,能够帮助开发者在浏览器环境中轻松获取照片的拍摄信息。通过这个强大的图像元数据提取工具,您可以访问包括相机型号、拍摄时间、地理位置等在内的丰富图像信息,为网页应用增…

作者头像 李华