我有一张桌子,所以...
----------------------------------------
| 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:
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。
任何帮助都是最好的。
发布于 2013-12-06 08:39:40
在这一点上,你可以通过一种有趣的方式,通过多个连接来获得你想要限定的内容,或者,按照其他人的建议,应用一个预查询来获得所有符合条件的组,但可读性对我来说有点不可取。
无论如何,这里有一种方法遍历了表一次,但是使用了joins
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个更大的组,预先查询符合条件的组,然后加入到该组中
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)发布于 2013-12-06 08:09:16
也许这个,如果我理解你的话
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。
https://stackoverflow.com/questions/20413366
复制相似问题