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

时间:2018-06-18 20:42:15

标签: sql group-by where

所以我有类似

的东西
 prop1 | prop2
 aaa   | xxx
 aaa   | xxx
 bbb   | yyy
 bbb   | !yyy
 ccc   | zzz
 ccc   | zzz

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

那我怎么用sql做呢?

我如何才能获得' bbb'作为我的结果?

每组我可能有2到多人。

4 个答案:

答案 0 :(得分:3)

你可以试试这个。

DISTINCT上的

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 :(得分:1)

我只想使用group byhaving

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

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

  • 选择Distinct(非常自我解释)
  • 从表1中作为fp(别名表1到“fp”,这样你就可以第二次查询表1)
  • 左外连接表1为sp(第二次连接同一个表,并查询它们只返回属性1匹配的值,属性2不是)
  • Where子句将其限制为仅返回左外连接为真的结果(这是第二个属性不匹配的位置)

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