У меня проблемы с очень простым запросом sql. Я хочу идентифицировать все предметы, у которых более одного имени. Вот что я сейчас делаю:
select group_concat(distinct name) names
from table
group by master_id
having names like '%,%'
К сожалению, во многих names есть ,, поэтому вышеперечисленное не работает. Как правильно выполнить этот запрос?
Что именно означает 'не работает'?
@ Quasimodo'sclone Возвращает строки, соответствующие одному имени, содержащему запятую.
Тогда уже есть правильный ответ + комментарий, если вы ищете более одного разных имен с одинаковым master_id.
@TimBiegeleisen Я думаю, что вы дали правильный ответ в своем комментарии ниже, просто выполняя having count(distinct name) > 1, если вы хотите вставить это в ответ, я пойду и приму его.






Правильным решением будет:
… HAVING COUNT(name) > 1
В запросе с использованием GROUP BY агрегатные функции, такие как COUNT(), MIN() и MAX() (а также GROUP_CONCAT() и некоторые другие), могут использоваться для работы со всеми значениями столбца в сгруппированных строках.
Вы также можете включить COUNT(name) в столбцы, чтобы получить количество имен для master_id.
Это должен быть HAVING COUNT(DISTINCT name), но давайте посмотрим, какие данные OP может добавить к вопросу.
Вот правильная версия вашего запроса:
SELECT
master_id,
GROUP_CONCAT(DISTINCT name) names
FROM yourTable
GROUP BY master_id
HAVING COUNT(DISTINCT name) > 1;
Причина, по которой нам нужно учитывать отдельные в предложении HAVING, заключается в том, что логическим элементом в агрегированной строке является имя отчетливый.
Пожалуйста, добавьте образец данных к вашему вопросу.