SQL更新多个表

时间:2014-01-24 18:22:20

标签: mysql sql

我有一个数据库,其中包含一些来自外部源的数据,还有一些数据来自本地手动输入。

有一个items表,其中包含主要产品信息。此表格包含source列,以显示是手动输入还是外部输入。如果是手动,则source列将为NULL - 否则,它是外部来源中项目的唯一ID。

还有一个images表,其中item_id列与items表的ID相关联。外部图片还会将source设置为项目的唯一ID,item_id会暂时设置为相同的唯一ID。

问题是:在我进行外部数据刷新后,我需要更新本地图像表并将images.item_id设置为本地表中的项ID。我这样做一个查询:

UPDATE image_table  
SET image_table.item_id = 
(SELECT id from items WHERE items.source = image_table.source AND items.source IS NOT NULL)

我希望这只会更新items表中的行为NOT NULL的那些图像 - 但是,虽然它按预期的方式运行外部信息,但它也会设置本地图像{{ 1}}到0。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您的WHERE查询中需要UPDATE条件,而不是子查询中。否则,无论子查询的结果如何,都将更新表。

例如:

UPDATE `image_table`
SET `image_table`.`item_id` = 
(SELECT `id` FROM `items` WHERE `items`.`source` = `image_table`.`source` 
                       AND `items`.`source` IS NOT NULL)
WHERE EXISTS (SELECT id FROM `items` WHERE `items`.`source` = `image_table`.`source` 
                       AND `items`.`source` IS NOT NULL)

可能有更好的方法,不包括两个相同的子查询......但这是我想到的第一件事。

我认为这里有一个替代答案 - update table with data from other table if not null?

UPDATE
`image_table` INNER JOIN `items` ON `image_table`.`source` = `items`.`source`
 SET `image_table`.`item_id` = `items`.`id`
 WHERE `items`.`source` IS NOT NULL