选择一行在一列中具有相等值而在另一列中具有不同值的行

时间:2014-07-26 12:17:47

标签: mysql sql

这是我的测试数据库:http://sqlfiddle.com/#!2/e501e/1

我想执行一个MySQL查询来检查列 USERID 是否至少有两行具有不同的值,列 NUMBERID 的值是否相同。所以在这个例子中结果是: enter image description here

2 个答案:

答案 0 :(得分:2)

select count(*)
from   test a 
join   test b 
on     a.numberid = b.numberid 
and    a.userid != b.userid

此查询将返回2 x此类对的数量,以便足以判断是否存在任何此类对。

答案 1 :(得分:0)

http://sqlfiddle.com/#!2/e501e/14

select x.*
  from test x
  join (select numberid
          from test
         where numberid <> userid
         group by numberid
        having count(*) > 1) y
    on x.numberid = y.numberid
 where x.numberid <> x.userid

注意,即使您在屏幕截图中将其包含在红色中,也不会返回。那是因为它只有一行,其中numberid不等于userid。在您的屏幕截图中,如果您查看您标识的numberid的第二行,则numberid实际上等于用户ID,2。因此该行不计入您声明的2+要求。

并且numberid 1回来但是由于不同的原因,在sql小提琴的测试数据中,你有一个额外的行(1,3),当加上(1,2)时,使numberid 1符合2 +要求。只有(1,1)和(1,2)它不符合要求,因为只有(1,2)不同。