SQL返回类似的行

时间:2013-07-08 16:00:10

标签: sql

我从SQL查询中得到了下表(我们称之为“xxx”)。从“xxx”我想找到任何给定行具有相应行的所有行,其中列A相同,列B不同,列C相同,列D相同 - 匹配所有要求。所以在下面的行集中我只想要最后两行,在这两行中,D对于两行是相同的,C是相同的,B是不同的,A是相同的。什么是最容易归还的方法?

A           B       C       D
100000600   04080   127 640288
100000600   04080   127 641034
100000700   04080   127 659175
100000700   04095   128 664697
100000700   18192   128 676507
100000700   04095   128 676507

1 个答案:

答案 0 :(得分:1)

这似乎是exists子句的一个很好的应用:

select *
from xxxx x1
where exists (select 1
              from xxxx x2
              where x2.a = x1.a and
                    x2.b <> x1.b and
                    x2.c = x1.c and
                    x2.d = x1.d
             )

戈登,我为劫持你的答案而道歉。我无法提交答案,因为在编辑时问题已经结束。

带有EXISTS子句的查询将返回指定的结果集。获得等效结果的另一种方法是使用内联视图,以获取有多个B值的列A,C和D,然后将其连接到表,以返回行。 e.g。

SELECT t.A
     , t.B
     , t.C
     , t.D
  FROM ( 
         SELECT r.A
              , r.C
              , r.D
           FROM mytable r
          GROUP
             BY r.A
              , r.C
              , r.D
         HAVING COUNT(DISTINCT r.B) > 1
       ) s
  JOIN mytable t
    ON t.A = s.A
   AND t.C = s.C
   AND t.D = s.D
 ORDER
    BY t.A, t.C, t.D, t.B