postgresql 的 && 是数组重叠操作符,判断两数组是否至少有一个共同元素;仅 postgresql 支持,要求元素类型一致,空数组返回 false,null 数组返回 null。

SQL 中的 && 并不是标准 SQL 的数组操作符,而是 PostgreSQL 特有的**数组重叠操作符**(overlap operator),用于判断两个数组是否至少有一个共同元素。
什么是 && 操作符
在 PostgreSQL 中,&& 作用于两个相同类型的数组,返回 true 当且仅当两个数组存在至少一个相等的元素;否则返回 false。它不关心元素位置、重复次数或顺序。
-
ARRAY[1,2,3] && ARRAY[3,4,5]→ true(因为 3 同时存在) -
ARRAY['a','b'] && ARRAY['c','d']→ false -
ARRAY[1,1,2] && ARRAY[2,2]→ true(去重逻辑由比较隐含处理,只需值相等)
&& 的使用场景
常用于快速筛选“具有任意共同标签/分类/权限”的记录,比如用户标签匹配、商品多分类交集、权限组重叠判断等。
95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
- 查出至少拥有 'admin' 或 'editor' 权限的用户:
WHERE roles && ARRAY['admin', 'editor'] - 找同时出现在多个推荐列表中的商品 ID:
WHERE product_ids && recommended_list_a AND product_ids && recommended_list_b
注意事项与常见误区
该操作符仅 PostgreSQL 支持,MySQL、SQL Server、SQLite 等均不识别 &&;使用前需确认数据库类型。另外,数组元素类型必须严格一致(如 int[] 不能与 text[] 比较),否则报错。
- 空数组
ARRAY[]::int[]与任何数组做 && 都返回 false - NULL 数组参与比较结果为 NULL(三值逻辑),建议用
COALESCE(arr, '{}')防御 - 性能上,若数组很大且无索引,&& 是线性扫描,可配合 GIN 索引加速:
CREATE INDEX idx_on_tags ON table USING GIN (tags)
替代方案(其他数据库)
在不支持 && 的数据库中,可用 JSON 函数或自连接模拟重叠逻辑。例如 MySQL 8.0+ 可用 JSON_OVERLAPS() 处理 JSON 数组;SQL Server 可用 STRING_SPLIT + EXISTS 子查询。
- MySQL 示例:
JSON_OVERLAPS(tags, '["a","b"]')(tags 为 JSON 类型) - 通用 SQL 思路:将数组展开为行,用
EXISTS或INNER JOIN判断是否存在交集










