数据库是 Postgresql 假如有如下表数据
id | name | dep |
---|---|---|
1 | 1 | [1,2,3] |
2 | 2 | [2] |
3 | 3 | [3] |
我想得到的类似下面的 SQL 结果
SELECT * FROM table WHERE dep=2
id | name | dep |
---|---|---|
1 | 1 | [1,2,3] |
2 | 2 | [2] |
SELECT * FROM table WHERE dep=3
id | name | dep |
---|---|---|
1 | 1 | [1,2,3] |
3 | 3 | [3] |
只要 dep 列包含给定的值就满足条件,给定的值永远只可能是一个数字,不可能是数组
我现在的做法是 dep 列用 jsonb 存储的,然后用 jsonb 的语法实现了,有没有什么更好的方案呢
1
PrtScScrLk 2021-11-29 14:12:49 +08:00
模糊查询不知道行不行? like %2%这种
|
2
imherer OP @PrtScScrLk 模糊查询不行,必须要精确查找, 因为如果有这样的两列数据[1,23,4] [1,2] 这样模糊查询%2%的话就不正确
|
3
yuhangch 2021-11-29 14:15:44 +08:00
|
4
imherer OP @yuhangch 感谢,搞定了! 其实我一开始就是用的 array ,但是不知道怎么写 sql 才改用的 jsonb
笑哭 哭笑 笑出眼泪 破涕为笑 笑死 笑尿 笑 cry |
5
zhazi 2021-11-29 14:32:11 +08:00
|
7
moen 2021-11-29 22:02:49 +08:00
SELECT * FROM table WHERE dep @> ARRAY[2]
SELECT * FROM table WHERE dep @> ARRAY[3] PS:建议养成多看看文档的习惯 |
9
PrtScScrLk 2021-12-01 12:43:53 +08:00
好家伙,学到了学到了
|