如下字段:
id,name,category
,其中 category 类型是 jsonb
假如有如下 3 行数据:
想要的结果是:
where category=11 的时候返回 1001 这一行数据
where category=33 的时候返回 1001 和 1003 两行数据
1
javapythongo 2019-10-11 16:27:11 +08:00
可以的
|
2
imherer OP |
3
reus 2019-10-11 16:34:16 +08:00
where category && array[11]
|
4
randm 2019-10-11 16:37:57 +08:00
数据都没有 KEY 键,很难定位
https://www.postgresql.org/docs/12/functions-json.html |
5
reus 2019-10-11 16:38:43 +08:00
看错了,json 要用 @>
select category @> '11'::jsonb |
9
optional 2019-10-11 16:40:55 +08:00 1
category @> '22'::jsonb 这样。
如果是字符串数组就更简单 category ? '22' |
10
imherer OP |
12
randm 2019-10-11 16:51:49 +08:00 1
补上,有字段名,那应该可以的
WHERE category @> '[11]'::jsonb |
13
imherer OP @optional 我尝试把字段改成字符串数组后,报语法错误呢 operator does not exist: character varying[] ? unknown
改了之后的源数据是这样的 1001, name1, {11, 22, 33} |
14
optional 2019-10-11 17:28:28 +08:00 1
@imherer text[] 用 @> array['11'] , 带 orderby 的时候 text[] 优于 jsonb array
|
16
encro 2020-01-02 16:33:58 +08:00
category 可以用 array[int]类型,然后加 Gist 索引
|