2015-03-25 5 views
1

У меня есть огромный стол с большим количеством строк и столбцов, но я опишу только важные из них:MySQL: Как выбрать различные значения из таблицы?

+-----------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-----------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name  | varchar(255)  | NO |  | NULL |    | 
| artikel | int(10) unsigned | NO | IDX | NULL |    | 
| color  | varchar(255)  | NO |  | NULL |    | 
+-----------+------------------+------+-----+---------+----------------+ 

Пример данных:

1 apple  1000  red 
2 apple  1000  yellow 
3 lemon  2000  blue 
4 lem on  2000  green 
5 lemon  2000  black 
6 apple  1000  white 
7 cherry  3000  lime 
8 cherry  3000  pink 
9 lemon  2000  silver 
10 apple  1000  gold 

Как вы можете видеть, индекс на artikel, каждый artikel имеет некоторые name (для каждого artikel есть то же самое name) и разные color. Все в порядке, но со строкой 4 есть проблема, есть ошибка name = lem on, это должно быть lemon.

Я хочу выбрать эти строки (GROUP BY artikel), где нет уникального name, но HAVING COUNT(name) > 1. Поэтому мой выбор вернет одну строку, где будет artikel = 2000.

Я пробовал HAVING, DISTINCT, но без успеха.

Как это можно сделать?

ответ

3

Использование group by и having:

select artikel 
from exampledata 
group by artikel 
having min(name) <> max(name); 

Вы также можете использовать count(distinct) в пункте having. Но count(distinct) обычно требует больше работы, чем просто сравнение минимального и максимального значений.

+0

Да, это он, спасибо человеку ... – Legionar

Смежные вопросы