2013-02-22 1 views
0

У меня есть этот сценарийна Запросы записи с различными появления

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

Я хочу, чтобы получить записи с различными значениями в colB. Поэтому в результате я ожидаю результат идентификаторов, у которых разные значения для столбца b.

003 
004 

означая 003 имеет й и Y, а 004 имеет й и Z

Я попытался:

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

выглядит неправильно, потому что группы люди с таким же A и B

поэтому я удалил col b по группе, но тогда он получает все те же A и игнорирует, равен ли B или нет. Я не знаю правильного синтаксиса.

ответ

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

Хмм я избегал подзаголовка, потому что я запускал его с сотнями тысяч записей в производстве, и это может замедлить работу системы? – newbjava

+0

В этом случае попробуйте решение Гордона. Но я бы тестировал все варианты производительности; то, что мы можем думать быстрее, может быть, а может и не быть, согласно оптимизациям DMBS. – entonio

0

Попробуйте это:

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

Ключ count(distinct).

Несколько более эффективной формой этого является:

having min(colB) <> max(colB) 

Однако, это не обобщает более 2 значений.