• 请不要在回答技术问题时复制粘贴 AI 生成的内容
imherer
V2EX  ›  程序员

请教一个 SQL 写法

  •  
  •   imherer · Nov 29, 2021 · 1914 views
    This topic created in 1809 days ago, the information mentioned may be changed or developed.

    数据库是 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 replies  •  2021-12-01 12:43:53 +08:00
    PrtScScrLk
    PrtScScrLk
    Nov 29, 2021
    1
    模糊查询不知道行不行? like %2%这种
    imherer
    imherer
    OP
    Nov 29, 2021
    2
    @PrtScScrLk 模糊查询不行,必须要精确查找, 因为如果有这样的两列数据[1,23,4] [1,2] 这样模糊查询%2%的话就不正确
    imherer
    imherer
    OP
    Nov 29, 2021
    4
    @yuhangch 感谢,搞定了! 其实我一开始就是用的 array ,但是不知道怎么写 sql 才改用的 jsonb
    笑哭 哭笑 笑出眼泪 破涕为笑 笑死 笑尿 笑 cry
    imherer
    imherer
    OP
    Nov 29, 2021
    6
    @zhazi 厉害了,还有这个写法,试了下完全可以
    moen
    moen
    Nov 29, 2021
    7
    SELECT * FROM table WHERE dep @> ARRAY[2]
    SELECT * FROM table WHERE dep @> ARRAY[3]

    PS:建议养成多看看文档的习惯
    imherer
    imherer
    OP
    Nov 29, 2021
    8
    @moen 大佬说的是🌚
    PrtScScrLk
    PrtScScrLk
    Dec 1, 2021
    9
    好家伙,学到了学到了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4336 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 08:35 · PVG 16:35 · LAX 00:35 · JFK 03:35
    ♥ Do have faith in what you're doing.