Есть много способов, чтобы иметь дело с повторяющимися записями. Возможно, лучший способ для большинства ситуаций, чтобы предотвратить их полностью используя уникальные ключи:
ALTER TABLE `mytable` ADD UNIQUE INDEX (`firstname`,`lastname`,`age`);
Однако, как у вас уже есть дубликаты и нужно найти их, то есть позже. Для вашего конкретного запроса, вот один из способов справиться с этим:
SELECT s.`firstname`,s.`lastname`,IF(c.rc > 1,'ERROR',s.`age`) AS 'age'
FROM `myTable` AS s
JOIN (SELECT `firstname`, `lastname`, `age`, count(*) AS rc
FROM `myTable`
GROUP BY `firstname`,`lastname`,`age`)
AS c ON c.`firstname` = s.`firstname`
AND c.`lastname` = s.`lastname`
AND c.`age` = s.`age`;
Если вы хотите только получить 1 строку для каждой комбинации имя/возраст, добавить DISTINCT к внешнему запросу:
SELECT DISTINCT s.`firstname`,s.`lastname`,IF(c.rc > 1,'ERROR',s.`age`) AS 'age'
FROM `myTable` AS s
JOIN (SELECT `firstname`, `lastname`, `age`, count(*) AS rc
FROM `myTable`
GROUP BY `firstname`,`lastname`,`age`)
AS c ON c.`firstname` = s.`firstname`
AND c.`lastname` = s.`lastname`
AND c.`age` = s.`age`;
очистить ваши данные , Подумайте, что у вас может быть 2 20-летнего john doe's – AsConfused