Я пытаюсь найти каждую строку с дубликатами в базе данных 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
)
Вы не можете использовать псевдонимы в предложениях WHERE; и на самом деле вам не нужен CONCAT (в этом случае он увеличивает ваши вычислительные затраты); вместо этого вы можете сравнить "кортежи".
SELECT *
FROM users
WHERE ('firstName', 'lastName') IN (
SELECT 'firstName', 'lastName'
FROM users
GROUP BY 'firstName', 'lastName'
HAVING COUNT(*) > 1
);