首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql -至少选择一个或不选择

Mysql -至少选择一个或不选择
EN

Stack Overflow用户
提问于 2013-12-06 08:01:08
回答 2查看 276关注 0票数 0

我有一张桌子,所以...

代码语言:javascript
复制
----------------------------------------
| id |     name      |  group | number |
----------------------------------------
|  1 |          joey |      1 |     2  |
|  2 |         keidy |      1 |     3  |
|  3 |         james |      2 |     2  |
|  4 |        steven |      2 |     5  |
|  5 |         jason |      3 |     2  |
|  6 |         shane |      3 |     3  |
----------------------------------------  

我像这样运行select:

代码语言:javascript
复制
SELECT * FROM table WHERE number IN (2,3);

我试图解决的问题是,我只想从每个数字有1行或更多行的组中获取get结果。例如,上面的查询返回id的1-2- 3 -5-6,当我希望结果排除id 3时,因为'2‘的组只能返回数字'2’的1个结果,而不能返回2和3的结果,因为组2没有数字3的行,我希望它根本不选择id 3。

任何帮助都是最好的。

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 08:39:40

在这一点上,你可以通过一种有趣的方式,通过多个连接来获得你想要限定的内容,或者,按照其他人的建议,应用一个预查询来获得所有符合条件的组,但可读性对我来说有点不可取。

无论如何,这里有一种方法遍历了表一次,但是使用了joins

代码语言:javascript
复制
select DISTINCT
      T.id,
      T.Name,
      T.Group,
      T.Number
   from
      YourTable T
         Join YourTable T2
            on T.Group = T2.Group AND T2.Group = 2
         Join YourTable T3
            on T.Group = T3.Group AND T3.Group = 3
   where
      T.Number IN ( 2, 3 )

因此,在第一条记录中,它由自己的组指向T2组,而T2组具体是一个2...但是测试组的T3实例和t3的组是3。

如果它不能完成对T2或T3实例的连接,则会进行记录以供考虑,而且由于索引对于像这样的连接非常有效,因此请确保您有一个索引用于编号条件,另一个索引用于(GROUP,NUMBER)用于这些比较和下一个查询示例...

如果比这个简单的2个更大的组,预先查询符合条件的组,然后加入到该组中

代码语言:javascript
复制
select
      YT2.*
   from
      ( select YT1.group
           from YourTable YT1
           where YT1.Number in (2, 3)
           group by YT1.group
           having count( DISTINCT YT1.group ) = 2 ) PreQualified
      JOIN YourTable YT2
         on PreQualified.group = YT2.group
         AND YT2.Number in (2,3)
票数 1
EN

Stack Overflow用户

发布于 2013-12-06 08:09:16

也许这个,如果我理解你的话

代码语言:javascript
复制
  SELECT id FROM table WHERE `group` IN
    (SELECT `group` FROM table WHERE number IN (2,3) 
    GROUP BY `group` 
    HAVING COUNT(DISTINCT number)=2)

如果您想要只包含一个数字的组的if,这将返回两个数字都存在于group.Remove DISTINCT中的所有if。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20413366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档