2014-04-03 43 views
0
UPDATE `tombaldi_2bj3de9ad`.`catalog_product_option_type_value` 
SET `catalog_product_option_type_value`.`option_id` = '72' 
WHERE `catalog_product_option_type_value`.`option_id` IN 
(SELECT `catalog_product_option_type_value`.`option_id` 
FROM `tombaldi_2bj3de9ad`.`catalog_product_option_type_title` 
INNER JOIN `tombaldi_2bj3de9ad`.`catalog_product_option_type_value` ON catalog_product_option_type_title.option_type_id = catalog_product_option_type_value.option_type_id 
WHERE (
    CONVERT(`title` USING utf8) LIKE '%initials%' 
)) 

我得到的錯誤無法使此查詢生效。 MySQL的更新,然後選擇另一個查詢更新

#1093 - 你不能指定更新目標表「catalog_product_option_type_value」 FROM子句

試圖解決這一個。經過研究和嘗試,再次嘗試。

+0

CONVERT?你能想象這有多可怕嗎? – Strawberry

+0

另外,你似乎在這裏有一個完全冗餘的子查詢!?!? – Strawberry

回答

0

在MySQL查詢更新過程中不能使用同一個表,這個可以通過給新的別名到您的子查詢

UPDATE tombaldi_2bj3de9ad.catalog_product_option_type_value 
SET catalog_product_option_type_value.option_id = '72' 
WHERE catalog_product_option_type_value.option_id 
IN (SELECT t.option_id 
FROM (
SELECT catalog_product_option_type_value.option_id 
FROM tombaldi_2bj3de9ad.catalog_product_option_type_title 
INNER JOIN tombaldi_2bj3de9ad.catalog_product_option_type_value 
ON catalog_product_option_type_title.option_type_id = catalog_product_option_type_value.option_type_id 
WHERE (CONVERT(title USING utf8) LIKE '%initials%') 
) t 
) 

甚至更​​好使用加入你的更新查詢進行

UPDATE 
    tombaldi_2bj3de9ad.catalog_product_option_type_value cv 
    JOIN tombaldi_2bj3de9ad.catalog_product_option_type_title ct 
    ON(ct.option_type_id = cv.option_type_id) 
SET 
    cv.option_id = '72' 
WHERE CONVERT(ct.title USING utf8) LIKE '%initials%' 
+0

每個派生表都必須有自己的別名錯誤 – user3050153

+0

@downvoters關心解釋 –

+1

如果可以的話,我會投票。這幫助並做了我想要的。 – user3050153