[英]SQL update over multiple tables
我有一个数据库,其中有一些数据来自外部来源,而有些则是在本地手动输入的。
有一个items
表,其中包含主要产品信息。 该表包括一个source
列,以显示它是手动输入还是外部输入。 如果是手动的,则source
列将为NULL
否则,它是外部源中项目的唯一ID。
还有一个images
表,其中有一个item_id
列,该列键入items
表的ID。 外部图像还将source
设置为项目的唯一ID,并且item_id
暂时设置为相同的唯一ID。
这是问题所在:刷新外部数据后,需要更新本地图像表,并将images.item_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
那些图像-但是,尽管它按外部信息的预期工作,但它还将本地图像item_id
为0。
有一个更好的方法吗?
您将在UPDATE
查询中而不是子查询中需要WHERE
条件。 否则,无论您的子查询结果如何,都将更新该表。
例如:
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)
也许有更好的方法,它不包含两个相同的子查询...但这是我想到的第一件事。
我认为这里还有一个替代答案- 如果不是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.