我有一个数据库,其中包含一些来自外部源的数据,还有一些数据来自本地手动输入。
有一个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。
有更好的方法吗?
答案 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