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, но безуспешно.

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


person Legionar    schedule 25.03.2015    source источник


Ответы (1)


Используйте group by и having:

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

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

person Gordon Linoff    schedule 25.03.2015