我有一个像这样的表有两个属性a
和b
。现在,有大量数据通过这些内容,我想选择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
如果不可能只是2
和4
(作为两个结果行),那么我可以在第二个查询中获得更具体的数据。
我尝试使用GROUP BY
和HAVING
以及一些带子查询的构造,但没有任何结果与我想要的结果接近。我真的不想获取所有数据并通过手动处理。
这可能是非常简单的事情,但我不能接受它,那么如何解决这个问题呢?
答案 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)