V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imherer
V2EX  ›  程序员

请教一个 SQL 写法

  •  
  •   imherer · 2021-11-29 14:06:46 +08:00 · 1141 次点击
    这是一个创建于 1101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据库是 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 条回复    2021-12-01 12:43:53 +08:00
    PrtScScrLk
        1
    PrtScScrLk  
       2021-11-29 14:12:49 +08:00
    模糊查询不知道行不行? like %2%这种
    imherer
        2
    imherer  
    OP
       2021-11-29 14:14:34 +08:00
    @PrtScScrLk 模糊查询不行,必须要精确查找, 因为如果有这样的两列数据[1,23,4] [1,2] 这样模糊查询%2%的话就不正确
    yuhangch
        3
    yuhangch  
       2021-11-29 14:15:44 +08:00
    imherer
        4
    imherer  
    OP
       2021-11-29 14:20:00 +08:00
    @yuhangch 感谢,搞定了! 其实我一开始就是用的 array ,但是不知道怎么写 sql 才改用的 jsonb
    笑哭 哭笑 笑出眼泪 破涕为笑 笑死 笑尿 笑 cry
    imherer
        6
    imherer  
    OP
       2021-11-29 14:34:08 +08:00
    @zhazi 厉害了,还有这个写法,试了下完全可以
    moen
        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:建议养成多看看文档的习惯
    imherer
        8
    imherer  
    OP
       2021-11-29 22:21:25 +08:00
    @moen 大佬说的是🌚
    PrtScScrLk
        9
    PrtScScrLk  
       2021-12-01 12:43:53 +08:00
    好家伙,学到了学到了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3733 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:35 · PVG 18:35 · LAX 02:35 · JFK 05:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.