我有桌子

id = 1
name = 'one'
group = 1

id = 2
name = 'two'
group = 1

id = 3
name = 'three'
group = 2


我必须在一个SQL查询中获得所有单身的名字,在这种情况下,id = 3
和另一个sql所有名称均为倍数,在本例中为id = 1和id = 2,因为它们具有相同的组。
我想这应该是选择中的一个选择,但不确定。

提前致谢。

最佳答案

听起来您想使用与此类似的东西:

select id
from yourtable
group by `group`
having count(`group`) = 1


请参见SQL Fiddle with Demo

然后,如果要返回所有详细信息,则可以将查询扩展为:

select *
from yourtable t1
where id in (select id
            from yourtable t2
            group by `group`
            having count(`group`) = 1)


请参见SQL Fiddle with Demo

如果要返回具有相同组的所有行,则可以使用:

select *
from yourtable t1
where `group` in (select `group`
                  from yourtable t2
                  group by `group`
                  having count(`group`) > 1)


SQL Fiddle with Demo

然后,如果您想返回所有内容以及一个标识它是单个还是多个的标志,则可以使用与此类似的东西。您会注意到,我包含一个标志来显示什么groups具有一行,然后哪些组具有多个行:

select *, 'single' Total
from yourtable t1
where `group` in (select `group`
                  from yourtable t2
                  group by `group`
                  having count(`group`) = 1)
union all
select *, 'multiple' Total
from yourtable t1
where `group` in (select `group`
                  from yourtable t2
                  group by `group`
                  having count(`group`) > 1)


SQL Fiddle with Demo

关于mysql - 在mysql中获取多行和单行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15004274/

10-13 08:52
查看更多