Выберите дубликат, используя раздел в MySQL? - PullRequest
0 голосов
/ 17 апреля 2019

Я бы хотел выбрать все дубликаты из таблицы:

SELECT * FROM people HAVING (count(*) OVER (PARTITION BY name)) > 1;

К сожалению, я получаю ошибку:

Error Code: 3593. You cannot use the window function 'count' in this context. 

Одно менее изящное решение было бы:

SELECT 
    *
FROM
    people
WHERE
    code IN (SELECT 
            name
        FROM
            people
        GROUP BY name
        HAVING COUNT(*) > 1);

Как мне переписать мой первый запрос, чтобы он работал?

1 Ответ

1 голос
/ 17 апреля 2019

Если code идентичен, то вы можете использовать exists:

select p.*
from people p 
where exists (select 1 from people p1 where p1.name = p.name and p.code <> p1.code);

Использовать вместо этого столбец идентификаторов, если столбец code не имеет функции идентификации, если вся таблица не имеет идентификаторовстолбец, то ваш метод работает нормально со следующим обновленным запросом:

SELECT p.*
FROM people p
WHERE name IN (SELECT name FROM people GROUP BY name HAVING COUNT(*) > 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...