所以我有类似
的东西 prop1 | prop2
aaa | xxx
aaa | xxx
bbb | yyy
bbb | !yyy
ccc | zzz
ccc | zzz
现在我可以通过prop1分组并获得aaa,bbb,ccc,我可以单独检查它们并发现bbb的两个属性不匹配,
那我怎么用sql做呢?
我如何才能获得' bbb'作为我的结果?
每组我可能有2到多人。
答案 0 :(得分:3)
你可以试试这个。
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
答案 1 :(得分:1)
我只想使用group by
和having
:
select prop1
from t
group by prop1
having min(prop2) <> max(prop2);
答案 2 :(得分:0)
我们打电话给你的桌子table1
。然后,以下查询将为您提供具有多个唯一值的prop1
(换句话说,对于同一prop2
具有不同的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
此答案还会告诉您相关prop2
有多少prop1
个值。
答案 3 :(得分:0)
假设您的属性1是您的“密钥”,在没有嵌套查询的情况下执行此操作的“正确”方法是使用左外连接。左外连接将搜索具有相同属性1的一个或多个条目,并将返回其对应属性2值不匹配的不同属性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中有100个结果并且想要查看不匹配的结果,请将sp.prop2添加到您的select子句中,并且每个非匹配值和属性将获得一个结果1它匹配。