1

我有一张这样的表,它有两个属性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 BY以及HAVING一些带有子查询的构造,但没有什么能接近我想要的结果。我真的不想获取所有数据并手动处理。

这可能是一件非常简单的事情,但我就是无法理解,那么如何解决这个问题呢?

4

1 回答 1

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)
于 2013-02-08T17:13:13.907 回答