PostgreSQL查询数组列含指定值报错,求正确写法
PostgreSQL数组列包含指定值的查询问题
表结构与测试数据
CREATE TABLE "public"."test" ( "id" integer NOT NULL, "game_ids" integer[], CONSTRAINT "test_pkey" PRIMARY KEY ("id") ); INSERT INTO "public"."test" ("id", "game_ids") VALUES (1, '{5,6,7}'), (2, '{5,12,18}'), (3, '{12,13,18}'), (4, '{14,22,23}');
需求
查询所有game_ids列包含值12的行。
错误尝试分析
你写的几个查询语句都存在语法或类型匹配问题:
SELECT * FROM test WHERE ANY game_ids = 12;:ANY操作符语法错误,PostgreSQL中ANY需要将目标数组用括号包裹,且正确比较顺序应为值 = ANY(数组列)SELECT * FROM test WHERE game_ids @> [12];:数组字面量格式错误,PostgreSQL中数组需用单引号包裹的{}格式,而非[]SELECT * FROM test WHERE game_ids @> 12;:@>是数组包含运算符,要求两边均为数组类型,这里12是单个整数,类型不匹配SELECT * FROM test WHERE 12 = ANY game_ids;:缺少括号,ANY后的数组必须用括号包裹,即ANY(game_ids)SELECT * FROM test WHERE game_ids >@ [12];:运算符方向错误(正确包含运算符是@>),同时数组格式错误
正确查询语句
方法1:使用ANY操作符
SELECT * FROM test WHERE 12 = ANY(game_ids);
方法2:使用数组包含运算符@>
SELECT * FROM test WHERE game_ids @> '{12}'::integer[];
或者更直观的数组构造写法:
SELECT * FROM test WHERE game_ids @> ARRAY[12];
内容的提问来源于stack exchange,提问作者Danny Hobo
相关产品推荐
相关产品推荐

