Я использую этот запрос, чтобы найти дубликаты на основе двух полей:
SELECT
last_name,
first_name,
middle_initial,
COUNT(last_name) AS Duplicates,
IF(rec_id = '', 1, 0) AS has_REC_ID
FROM files
GROUP BY last_name, first_name
HAVING COUNT(last_name) > 1 AND COUNT(first_name) > 1;
Хорошо, это возвращает набор строк с именами по имени, фамилии и отчеству, столбец с именем «Duplicates» с множеством 2-х и столбец с именем has_REC_ID со смешанными 1-м и 0-м
В конечном итоге я пытаюсь найти строки с одинаковыми именами и именами, а затем для каждой из этих пар найти ту, которая имеет ('') в качестве значения для rec_id
, назначить значение rec_id из того, которое ДОЛЖНО иметь rec_id, а затем удалить запись, у которой во-первых был rec_id.
Итак, для начала я решил создать новую колонку и сделать что-то вроде этого:
UPDATE files a
SET a.has_dup --new column
= if(a.last_name IN (
SELECT b.last_name
FROM files b
GROUP BY b.last_name
HAVING COUNT(b.last_name) > 1
)
, 1, null);
Но MySQL возвращает: «Вы не можете указать целевую таблицу« a »для обновления из предложения from»
Могу поспорить, что есть кое-что гораздо менее смешное, чем метод, который я здесь пробую. Может кто-нибудь, пожалуйста, помогите мне понять, что это такое?
ОБНОВЛЕНИЕ: Я также пытался:
UPDATE files a
SET a.has_dup = 1
WHERE a.last_name IN (
SELECT b.last_name
FROM files b
GROUP BY b.last_name
HAVING COUNT(b.last_name) > 1
);
... и получил то же сообщение об ошибке.