Найти повторяющиеся значения concat

0

Я пытаюсь найти каждую строку с дубликатами в базе данных MySQL.

1   alex    smith
2   bob     smith
3   alex    smith

Я хочу вернуться:

1   alex    smith
3   alex    smith

Этот код найдет дубликаты, но не отображает каждую строку, которая является дубликатом.

SELECT
    *,
    CONCAT('firstName', ' ', 'lastName') as full_name,
    COUNT(*) d
FROM users
GROUP BY full_name
HAVING d > 1;  

Код ниже - это то, что я пытаюсь получить каждую строку, которая является дубликатом, но я получаю сообщение об ошибке "# 1054 - Неизвестный столбец" full_name "в" IN/ALL/ANY subquery ""

SELECT CONCAT('firstName', ' ', 'lastName') as full_name
FROM users
WHERE full_name IN (
    SELECT CONCAT('firstName', ' ', 'lastName') as full_name
    FROM users
    GROUP BY full_name
    HAVING COUNT(full_name) > 1
)
Теги:
group-by
having

1 ответ

2
Лучший ответ

Вы не можете использовать псевдонимы в предложениях WHERE; и на самом деле вам не нужен CONCAT (в этом случае он увеличивает ваши вычислительные затраты); вместо этого вы можете сравнить "кортежи".

SELECT *
FROM users
WHERE ('firstName', 'lastName') IN (
    SELECT 'firstName', 'lastName'
    FROM users
    GROUP BY 'firstName', 'lastName'
    HAVING COUNT(*) > 1
);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню