请教一个 SQL 写法

2021-11-29 14:06:46 +08:00
 imherer

数据库是 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 的语法实现了,有没有什么更好的方案呢

1138 次点击
所在节点    程序员
9 条回复
PrtScScrLk
2021-11-29 14:12:49 +08:00
模糊查询不知道行不行? like %2%这种
imherer
2021-11-29 14:14:34 +08:00
@PrtScScrLk 模糊查询不行,必须要精确查找, 因为如果有这样的两列数据[1,23,4] [1,2] 这样模糊查询%2%的话就不正确
yuhangch
2021-11-29 14:15:44 +08:00
imherer
2021-11-29 14:20:00 +08:00
@yuhangch 感谢,搞定了! 其实我一开始就是用的 array ,但是不知道怎么写 sql 才改用的 jsonb
笑哭 哭笑 笑出眼泪 破涕为笑 笑死 笑尿 笑 cry
zhazi
2021-11-29 14:32:11 +08:00
imherer
2021-11-29 14:34:08 +08:00
@zhazi 厉害了,还有这个写法,试了下完全可以
moen
2021-11-29 22:02:49 +08:00
SELECT * FROM table WHERE dep @> ARRAY[2]
SELECT * FROM table WHERE dep @> ARRAY[3]

PS:建议养成多看看文档的习惯
imherer
2021-11-29 22:21:25 +08:00
@moen 大佬说的是🌚
PrtScScrLk
2021-12-01 12:43:53 +08:00
好家伙,学到了学到了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX