MySQL放入重复的id

时间:2018-02-22 14:21:29

标签: mysql

我尝试运行使用同一个表的UPDATE查询,并且我收到错误说" 1093 - 表' queues_monitor_times'被指定两次,两者都作为'更新'的目标。并作为数据的单独来源"。

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;如果不是行,我想要设置行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

请告知并感谢您的帮助。

1 个答案:

答案 0 :(得分: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表具有完全相同的数据。