2013-02-22 50 views
0

我有這種情況上查詢記錄不同發生

|---COL A ------------------COL B----| 
|----001 ----------------------X-----| 
|----001 ----------------------X-----| 
|----002 ----------------------Y-----| 
|----002 ----------------------Y-----| 
|----003 ----------------------X-----| 
|----003 ----------------------Y-----| 
|----004 ----------------------X-----| 
|----004 ----------------------Z-----| 

我想在colB不同的值來獲得的記錄。因此,我期待的結果是列b的值不同的id。

003 
004 

意味着003有X和Y,和004具有x以及Z

我想:

select colA,count(*) from table group by colA,colB having count(*) >2; 

看起來錯誤的,因爲這組那些具有相同的A和B

所以我刪除了列上的組,但是然後它獲得了所有那些具有相同的A並忽視B是否相等。我不知道它的正確語法。

回答

0
SELECT colA 
FROM (
    SELECT colA, COUNT(DISTINCT colB) countB 
    FROM tableGroup 
    GROUP BY colA 
) 
WHERE countB > 1 
+0

嗯我是避免子選擇,因爲即時通訊與生產中的成千上萬的記錄運行它,它可能會減慢系統呢? – newbjava 2013-02-22 00:10:26

+0

在這種情況下,請嘗試戈登的解決方案。但我會測試所有的性能選項;根據DMBS所做的優化,我們認爲更快的可能會或可能不會如此。 – entonio 2013-02-22 00:12:48

0

試試這個:

select colA 
from t 
group by colA 
having count(distinct colB) >= 2 

的關鍵是count(distinct)。的這個

稍微更有效的形式是:

having min(colB) <> max(colB) 

但是,這並不能一概而論超過2倍的值。