从MySQL中选择非冗余数据?

时间:2013-02-08 17:06:07

标签: mysql select redundancy

我有一个像这样的表有两个属性ab。现在,有大量数据通过这些内容,我想选择a的一个值超过1个b的不同值的所有记录。

例如,来自以下示例表

   a    b
---------
   1    1
   1    1
   2    1
   2    2
   3    1
   4    1
   4    5
   4    1

我想选择

   a   b
--------
   2   1
   2   2
   4   1
   4   5

如果不可能只是24(作为两个结果行),那么我可以在第二个查询中获得更具体的数据。

我尝试使用GROUP BYHAVING以及一些带子查询的构造,但没有任何结果与我想要的结果接近。我真的不想获取所有数据并通过手动处理。

这可能是非常简单的事情,但我不能接受它,那么如何解决这个问题呢?

1 个答案:

答案 0 :(得分:3)

对于单个表访问(在同一行上返回特定值b的所有a值),请尝试:

select a, group_concat(distinct b)
from yourtable
group by a
having count(distinct b) > 1

要为a和b的每个组合返回单独的行,请尝试:

select distinct yt1.a, yt1.b
from yourtable yt1
join yourtable yt2 on yt1.a = yt2.a and yt1.b <> yt2.b

Exists变体:

select distinct a, b
from yourtable yt1
where exists
(select 1
 from yourtable yt2
 where yt1.a = yt2.a and yt1.b <> yt2.b)