MySQL положить в дубликаты идентификаторов

0

Я пытаюсь запустить запрос 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

Пожалуйста, посоветуйте и благодарите за помощь.

  • 0
    На странице документации оператора UPDATE объясняется: «Вы не можете обновить таблицу и выбрать одну и ту же таблицу в подзапросе».
  • 0
    обернуть его в другой подзапрос, который должен работать .. IF(( SELECT id FROM ( SELECT id FROM queues_monitor_times ... )
Показать ещё 6 комментариев
Теги:

1 ответ

0

Я смог решить свою проблему. Спасибо за вашу помощь!

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 имеют одинаковые данные.

Ещё вопросы

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