2010-05-26 2 views
4

Скажет:MySQL: Игнорировать выбранный столбец при использовании DISTINCT

  1. Я хочу запросить Колы colB и colC в моей таблице.

  2. Я хочу видеть значения DISTINCT, но я не хочу, чтобы colA был критерием различия.

  3. Опуская КОА не является вариантом.

Каков наилучший способ структурирования этого запроса?

+0

http://stackoverflow.com/questions/1918556/sql-select-distinct-values-from-1-column Возможный дубликат. – Nitrodist

ответ

0

я не знаю синтаксис для временной таблицы, поэтому псевдокод, если вы пожалуйста =)

Select Distinct ColB, ColC into @Temp 
From SomeTable 
Where (predicates) 

Select ColA, ColB, ColC 
From SomeTable 
Inner Join @Temp on (SomeTable.ColB = @Temp.ColB and SomeTable.ColC = @Temp.ColC) 
Where (predicates) /* Added for comments */ 

Надеется, что это помогает.

+0

Разве это не просто создаст экземпляр SomeTable? Внутреннее соединение будет соответствовать точно одной строке в @Temp. –

+0

Внутренняя запись будет соответствовать всем строкам, содержащим оба значения столбца, и никакие другие. – Immersive

+0

Да, но все строки в SomeTable (соответствующие предикату, если они есть) имеют их (ColB, ColC) пары в таблице @Temp. –

6

Здесь два случая. Скажем, у вас есть данные

A B C (columns) 
a b c1 
a b c2 

Принимая различные значения A, B дает только один результат (а, Ь), с двумя значениями для столбца C. Так что вопрос вы хотите увидеть все значения C или только одно значение для каждого отдельного значения столбцов A и B?

Если вы хотите увидеть только одно значение С, то вы можете написать

SELECT A, B, MAX(C) FROM YourTable 
    GROUP BY A, B 

С другой стороны, если вы хотите увидеть все значения C, то

SELECT DISTINCT A, B, C FROM YourTable WHERE ROW(A,B) IN 
    (SELECT A, B FROM YourTable 
    GROUP BY A, B) 

дает вам что. Эта последняя альтернатива необходима, если в таблице есть другие столбцы.

+0

Первый вариант выглядит неплохо, но не второй эквивалент SELECT DISTINCT A, B, C? –

+0

@Keith - Если нет других столбцов, то это одно и то же, но в ответ говорится: «Эта последняя альтернатива необходима, если в таблице есть другие столбцы». – mdma

+0

Я не понимаю, как SELECT DISTINCT A, B, C не работает, если есть дополнительные столбцы. –