2013-07-08 41 views
-1

我從SQL查詢中得到下表(我們稱之爲「xxx」)。從「xxx」中,我正在尋找所有的行中,任何給定的行有一個對應的行,其中列A是相同的,列B是不同的,列C是相同的,列D是相同的 - 匹配所有要求。因此,在下面的行集合中,我只想要這兩行中的最後兩行,兩行的D是相同的,C是相同的,B是不同的,而A是相同的。什麼是最簡單的方法來回報這個?SQL返回類似的行

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

除了添加下面提到的信息之外,請務必指出您正在談論的SQL的風格。 –

回答

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子句的查詢將返回指定的結果集。獲得等效結果的另一種方法是使用內聯視圖來獲取A,C和D列,其中有多個B值,然後將其加入到表中,以返回行。例如

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 
+0

使用EXISTS謂詞+1可以說是最簡單的。 – spencer7593