无法使此查询生效。 Mysql更新选择另一个查询然后更新

时间:2014-04-03 21:30:01

标签: mysql select sql-update

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%'
 ))

我收到错误

#1093 - 您无法在FROM子句中为更新指定目标表'catalog_product_option_type_value'

试图解决这个问题。已经研究过,再次尝试过。

1 个答案:

答案 0 :(得分: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%'