跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一个 SQL 写法
未分類
22 3 月 2022

请教一个 SQL 写法

请教一个 SQL 写法

資深大佬 : imherer 42

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

大佬有話說 (9)

  • 資深大佬 : PrtScScrLk

    模糊查询不知道行不行? like %2%这种

  • 主 資深大佬 : imherer

    @PrtScScrLk 模糊查询不行,必须要精确查找, 因为如果有这样的两列数据[1,23,4] [1,2] 这样模糊查询%2%的话就不正确

  • 資深大佬 : yuhangch

    用 array 也行,https://www.postgresql.org/docs/current/functions-array.html#ARRAY-OPERATORS-TABLE

  • 主 資深大佬 : imherer

    @yuhangch 感谢,搞定了! 其实我一开始就是用的 array ,但是不知道怎么写 sql 才改用的 jsonb
    笑哭 哭笑 笑出眼泪 破涕为笑 笑死 笑尿 笑 cry

  • 資深大佬 : zhazi

    https://stackoverflow.com/questions/39643454/postgres-check-if-array-field-contains-value

  • 主 資深大佬 : imherer

    @zhazi 厉害了,还有这个写法,试了下完全可以

  • 資深大佬 : moen

    SELECT * FROM table WHERE dep @> ARRAY[2]
    SELECT * FROM table WHERE dep @> ARRAY[3]
    PS:建议养成多看看文档的习惯

  • 主 資深大佬 : imherer

    @moen 大佬说的是

  • 資深大佬 : PrtScScrLk

    好家伙,学到了学到了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具