2013-02-22 46 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倍的值。