Mysql:来自单个选择的多个更新

时间:2014-07-11 15:00:03

标签: mysql database sql-update bigdata

我有一个案例,我需要在地址表中将一组字段匹配为唯一,但为此,在数据库上,我必须检测重复项,从数据库中删除它们并更新所有关联的外键。

我最终可能会进行多次查询:

  • 第一个用于检索原始 ID 以及相应的重复。** id ** s;
  • 第2,第3和第4,将关联的表格外键设置为原始 ID ,其中重复 id < /强>
  • 第3次删除重复数据库(或者只是将某些属性标记为已删除,以便在第二次查询时将其删除)

但是,向流程发送信息的多个查询的问题在于它是大数据的问题。

为此我必须:

  • 地址
  • 上添加一个标记为已删除的字段
  • 运行一个处理所有内容的查询
  • 如果我们无法在主查询中合并 DELETE 语句,我们必须删除所有已删除的标记行
  • 删除已删除的字段。

只要我接受了查询测试,我想出了这个想法:

SELECT `` FROM `Addresses` AS `Original`

WHERE
    ( UPDATE `A` SET `address_id` = `Original`.`id` WHERE `address_id` = `Duplicated`.`id` ) OR
    ( UPDATE `B` SET `address_id` = `Original`.`id` WHERE `address_id` = `Duplicated`.`id` ) OR
    ( UPDATE `C` SET `address_id` = `Original`.`id` WHERE `address_id` = `Duplicated`.`id` ) OR
    ( UPDATE `Addresses` SET `deleted` = true WHERE `id` = `Duplicated`.`id` )

INNER JOIN `Addresses` AS `Duplicated`
    ON
    `Original`.`id` < `Duplicated`.`id` AND
    `Original`.`street_id` = `Duplicated`.`street_id` AND
    `Original`.`city_id` = `Duplicated`.`city_id` AND
    `Original`.`door_number` = `Duplicated`.`door_number` AND
    `Original`.`floor` = `Duplicated`.`floor` AND
    `Original`.`extra` = `Duplicated`.`extra`

0 个答案:

没有答案