Как найти предметы с несколькими разными именами

У меня проблемы с очень простым запросом sql. Я хочу идентифицировать все предметы, у которых более одного имени. Вот что я сейчас делаю:

select group_concat(distinct name) names
from table 
group by master_id
having names like '%,%'

К сожалению, во многих names есть ,, поэтому вышеперечисленное не работает. Как правильно выполнить этот запрос?

Пожалуйста, добавьте образец данных к вашему вопросу.

Tim Biegeleisen 01.01.2019 05:00

Что именно означает 'не работает'?

Quasimodo's clone 01.01.2019 05:12

@ Quasimodo'sclone Возвращает строки, соответствующие одному имени, содержащему запятую.

user149341 01.01.2019 05:14

Тогда уже есть правильный ответ + комментарий, если вы ищете более одного разных имен с одинаковым master_id.

Quasimodo's clone 01.01.2019 05:17

@TimBiegeleisen Я думаю, что вы дали правильный ответ в своем комментарии ниже, просто выполняя having count(distinct name) > 1, если вы хотите вставить это в ответ, я пойду и приму его.

user10332687 01.01.2019 05:41
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
5
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Правильным решением будет:

… HAVING COUNT(name) > 1

В запросе с использованием GROUP BY агрегатные функции, такие как COUNT(), MIN() и MAX() (а также GROUP_CONCAT() и некоторые другие), могут использоваться для работы со всеми значениями столбца в сгруппированных строках.

Вы также можете включить COUNT(name) в столбцы, чтобы получить количество имен для master_id.

Это должен быть HAVING COUNT(DISTINCT name), но давайте посмотрим, какие данные OP может добавить к вопросу.

Tim Biegeleisen 01.01.2019 05:01
Ответ принят как подходящий

Вот правильная версия вашего запроса:

SELECT
    master_id,
    GROUP_CONCAT(DISTINCT name) names
FROM yourTable
GROUP BY master_id
HAVING COUNT(DISTINCT name) > 1;

Причина, по которой нам нужно учитывать отдельные в предложении HAVING, заключается в том, что логическим элементом в агрегированной строке является имя отчетливый.

Другие вопросы по теме