2013-02-08 34 views
1

我有一个像这样的表有ab两个属性。现在,有很多数据都经过了这些东西,我想选择所有记录,其中a的一个值具有多于1个不同值b从MySQL选择非冗余数据?

例如,从下面的示例表

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以及一些带有子查询的结构,但没有任何结果与我想要的结果接近。我真的不想通过手动获取所有数据和紧缩。

这可能是一件非常简单的事情,但我无法做到,所以如何解决这个问题?

+0

@JW。因为它们是'a = 1'和'a = 3'唯一的组合。 – 2013-02-08 17:10:48

回答

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) 
+1

谢谢!因为我在生产环境中有更多列,所以使用了附加的“GROUP BY b”的第二个变体。 ;) – 2013-02-08 17:23:10