所以我有类似以下的东西
prop1 | prop2
aaa | xxx
aaa | xxx
bbb | yyy
bbb | !yyy
ccc | zzz
ccc | zzz
现在,我可以按prop1分组并获得aaa、bbb、ccc,我可以逐个检查它们,发现bbb的两个属性不匹配。
那么我该如何使用SQL实现这一点?
如何只获取“bbb”作为我的结果?
每个组中可能有2个或更多元素。
所以我有类似以下的东西
prop1 | prop2
aaa | xxx
aaa | xxx
bbb | yyy
bbb | !yyy
ccc | zzz
ccc | zzz
现在,我可以按prop1分组并获得aaa、bbb、ccc,我可以逐个检查它们,发现bbb的两个属性不匹配。
那么我该如何使用SQL实现这一点?
如何只获取“bbb”作为我的结果?
每个组中可能有2个或更多元素。
我会简单地使用 group by 和 having:
select prop1
from t
group by prop1
having min(prop2) <> max(prop2);
DISTINCT 在 prop1 和 prop2 上执行,删除重复的数据,然后获取 COUNT 大于 1 的结果。
SELECT prop1
FROM (
SELECT DISTINCT prop1,prop2
FROM t
)t
GROUP BY prop1
HAVING COUNT(*) > 1
sqlfiddle:http://sqlfiddle.com/#!9/e2a10c/1
select distinct fp.prop1
from table1 as fp
left outer join table1 as sp on fp.prop1 = sp.prop1 and fp.prop2 != sp.prop2
where sp.prop2 is not null
这里有一个 SQLFiddle 证明它是可行的: http://sqlfiddle.com/#!17/2729b/6
基本上,它执行以下操作:
如果您的属性2中有数百个结果,并且想要查看不匹配的结果,请将 sp.prop2 添加到您的选择子句中,您将得到每个不匹配值的一个结果以及它匹配的属性1。
我们称您的表为table1。然后,以下查询将为您提供具有超过1个唯一值(或者换句话说,具有不同的prop2值的prop1)的prop1:
SELECT
x.prop1,
COUNT(1)
FROM (
SELECT
t.prop1,
t.prop2
FROM
table1 t
GROUP BY
t.prop1,
t.prop2
) x
GROUP BY
x.prop1
HAVING
COUNT(1) > 1
这个答案还会告诉你相关的prop1有多少不同的prop2值。
prop1 的值。 - Gordon Linoff
SELECT * FROM table WHERE prop1='bbb'吗? - brianyatesSELECT * FROM table GROUP BY prop1, prop2 HAVING count(distinct prop2) > 1;吗? - EreliSELECT *,count(distinct prop2) as cnt FROM table GROUP BY prop1 having cnt>1- Ereli