V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
baize
V2EX  ›  数据库

sql 查询语句请教

  •  
  •   baize · 2018-09-03 21:58:32 +08:00 · 2057 次点击
    这是一个创建于 2268 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道怎么排版,所以只能抽象点了 如下表 table

    id1(1,2,3,4,5,6) id2(x,x,y,y,z,x) id3(a,b,c,a,b,d)

    要查询条件为:已知 id3 字段 的 不同值(例如已知 id3 字段的值有 a,b,d ),查出这些 已知不同的值中 id2 字段相同 的集合

    7 条回复    2018-09-04 10:46:07 +08:00
    TommyLemon
        1
    TommyLemon  
       2018-09-03 22:13:26 +08:00   ❤️ 1
    ‘ id2 字段相同 的集合’ 是什么意思?
    如果是指去除满足 id3(a,b,d)条件的结果集中重复的 id2 ( x,x,z ) 变成 x,z, 那 GROUP BY 就行了
    ```sql
    SELECT * FROM table WHERE id3 IN('a', 'b', 'd') GROUP BY id2
    ```
    zjp
        2
    zjp  
       2018-09-03 22:33:53 +08:00   ❤️ 1
    如果你说的是 找出那些相应的 id2 全都相同的 id3,可以这样
    SELECT id3 FROM (select id3 from T group by id3, id2) AS f GROUP BY f.id3 HAVING COUNT(id3) = 1;
    而且也不需要预先知道 id3 的所有取值
    baize
        3
    baize  
    OP
       2018-09-03 22:56:15 +08:00
    @zjp 对的,感谢
    baize
        4
    baize  
    OP
       2018-09-03 22:56:40 +08:00
    @TommyLemon 是二楼这个意思,感谢
    zjp
        5
    zjp  
       2018-09-04 01:22:09 +08:00   ❤️ 1
    总觉得两个 GROUP BY 很鬼畜,果然是脑子掉坑里了
    SELECT id3 FROM t GROUP BY id3 HAVING COUNT(DISTINCT id2) = 1;
    jookr
        6
    jookr  
       2018-09-04 10:04:36 +08:00   ❤️ 1
    LZ 头像违规
    weimiangege
        7
    weimiangege  
       2018-09-04 10:46:07 +08:00   ❤️ 1
    LZ 头像违规
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3900 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:26 · PVG 18:26 · LAX 02:26 · JFK 05:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.