根据连接更新记录的表值

时间:2016-03-08 05:33:26

标签: mysql join sql-update

我有一个名为product的表。在此表中,我想更新一些产品ID值,但我无法直接更新,我的'其中'条件需要根据另一个表中的值来确定记录,所以我这样做:

update product set prod_active = 0 where prod_id in (
select prod_id from user_prod_sel where seltype = 100
)

我在这里遇到的问题是这很慢。如何将其转换为基于oin的查询,可以为我提供更快的结果?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

你应该可以这样做:

UPDATE product a 
JOIN user_prod_sel b ON a.prod_id = b.prod_id AND b.selType = 100 
SET a.prod_active = 0

答案 1 :(得分:0)

如果您想加快查询速度,则需要为product.prod_iduser_prod_sel.seltype添加索引。表索引完全用于加速数据选择。

ALTER TABLE `product` ADD INDEX `prod_id` (`prod_id`)

如果已有索引(例如,如果它是主键),请不要添加索引product.prod_id

ALTER TABLE `user_prod_sel` ADD INDEX `seltype` (`seltype`)

然后:

UPDATE `product`, `user_prod_sel`
SET `product`.`prod_active` = 0
WHERE 
    `product`.`prod_id` = `user_prod_sel`.`prod_id` AND
    `user_prod_sel`.`seltype` = 100

当然,创建索引是一次执行的任务,而不是在每次UPDATE查询之前执行。