如何检查 SQL 中的一个组中的所有字段是否相等

How do I check if all of a field are equal in a group in SQL

所以我有类似的东西

 prop1 | prop2
 aaa   | xxx
 aaa   | xxx
 bbb   | yyy
 bbb   | !yyy
 ccc   | zzz
 ccc   | zzz

现在我可以按 prop1 分组并得到 aaa、bbb、ccc,我可以单独检查它们并发现 bbb 的两个属性不匹配,

那么我如何用 sql 做到这一点?

如何只得到 'bbb' 作为我的结果?

我每组可能有 2 到很多。

让我们打电话给你的 table table1。然后,以下查询将为您提供具有超过 1 个唯一值的 prop1(或者,换句话说,对于相同的 prop1,具有不同的 prop2 值):

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 值。

你可以试试这个。

DISTINCT on prop1prop2 删除重复数据。然后 得到 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 是您的 "key","proper" 在没有嵌套查询的情况下执行此操作的方法是使用左外连接。左外连接将搜索一个或多个具有相同 属性 1 的条目,并将 return 不同的 属性 1 与它们对应的 属性 2 值不匹配。这是一个例子:

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

基本上,它正在执行以下操作:

  • Select 不同(非常自我解释)
  • From table 1 as fp(别名 table 1 到 "fp" 所以你可以再次查询 table 1)
  • 左外连接 table 1 as sp(第二次连接到相同的 table,并查询它们 return 只有 属性 的值1 个匹配,属性 2 个不匹配)
  • Where 子句将其限制为仅 return 左外连接为真(即第二个 属性 不匹配)的结果

如果您的 属性 2 中有 100 个结果,并且想查看不匹配的结果,请将 sp.prop2 添加到 select 子句中,您将得到一个每个不匹配值的结果以及它匹配的 属性 1。

我会简单地使用 group byhaving:

select prop1
from t
group by prop1
having min(prop2) <> max(prop2);