2016-03-08 42 views
1

我有一个名为product的表。在该表中,我想更新的一些产品ID值,但我不能这样做直接,我的“其中”条件需要根据从另一个表值来决定的记录,所以我做的:基于连接的记录的更新表值

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

这个问题我这里有这是非常缓慢的。我怎样才能把它转换成基于oin的查询,可以给我更快的结果?

任何帮助,非常感谢。

+0

可能的重复:http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query – JanR

回答

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 
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查询之前的任务。

相关问题