2016-03-08 56 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查詢之前的任務。