我从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
答案 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