Я пытаюсь запустить запрос UPDATE, который использует ту же таблицу, и я получаю сообщение об ошибке: "1093 - Таблица" queues_monitor_times "указана дважды, как в качестве цели для" UPDATE ", так и как отдельный источник данных".
UPDATE queues_monitor_times
SET queue_id = IF((
SELECT id
FROM queues_monitor_times
INNER JOIN(
SELECT pcc_group, pcc, gds, queue, category, 'name'
FROM queues_monitor_times
GROUP BY pcc_group, pcc, gds, queue, category, 'name'
HAVING COUNT(id) > 1
)temp ON queues_monitor_times.pcc_group = temp.pcc_group AND
queues_monitor_times.pcc = temp.pcc AND
queues_monitor_times.gds = temp.gds AND
queues_monitor_times.queue = temp.queue AND
queues_monitor_times.category = temp.category AND
queues_monitor_times.'name' = temp.'name'), 1, id)
WHERE
id NOT IN (SELECT MIN(id) FROM queues_old GROUP BY pcc_group, pcc, gds, queue, category, 'name');
Я выполнил запрос select сам по себе, и он показал все строки, которые были дубликатами, и это то, что я хотел. Я хочу, чтобы queue_id был установлен с самым низким идентификатором двойной строки, если строка является дубликатом или идентификатором строки, если это не так.
Пример того, что должен делать запрос:
id dup_id name value
1 1 John 13
2 2 John 13
3 3 Sally 6
4 4 Frank 4
5 5 Sally 6
И после запуска запроса он превратится в
id dup_id name value
1 1 John 13
2 1 John 13
3 3 Sally 6
4 4 Frank 4
5 3 Sally 6
Пожалуйста, посоветуйте и благодарите за помощь.
Я смог решить свою проблему. Спасибо за вашу помощь!
UPDATE queues_monitor_times
SET queue_id = (
SELECT
id
FROM
queues_old
WHERE
queues_old.pcc_group = queues_monitor_times.pcc_group
AND queues_old.pcc = queues_monitor_times.pcc
AND queues_old.gds = queues_monitor_times.gds
AND queues_old.queue = queues_monitor_times.queue
AND queues_old.category = queues_monitor_times.category
AND queues_old.'name' = queues_monitor_times.'name'
GROUP BY pcc_group, pcc, gds, queue, category, 'name'
HAVING COUNT(id) > 1)
WHERE
id NOT IN (SELECT MIN(id) FROM queues_old GROUP BY pcc_group, pcc, gds, queue, category, 'name');
Для тех, кто захочет использовать это в будущем, таблица queues_monitor_times и таблица queues_old имеют одинаковые данные.
UPDATE
объясняется: «Вы не можете обновить таблицу и выбрать одну и ту же таблицу в подзапросе».IF(( SELECT id FROM ( SELECT id FROM queues_monitor_times ... )