如何在FROM子句中为MYSQL指定更新的目标表?
问题描述:
我的脚本 - :如何在FROM子句中为MYSQL指定更新的目标表?
UPDATE catalog_product_price
SET catalog_product_price.value = 200
WHERE value_id = (
SELECT value_id
FROM catalog_product_price
WHERE `entity_id` = (
SELECT `entity_id`
FROM `catalog_product_entity`
WHERE `sku` LIKE 'sample'
)
AND website_id = 10
AND customer_group_id= (
SELECT customer_group_id
FROM customer_group
WHERE
customer_group_id = catalog_product_price.customer_group_id
AND customer_group_code =100
)
)
它给了我下面的错误 - : #1093 - 您不能指定目标表 'catalog_product_price' 的更新在FROM子句
任何人能向我提供的解决方案对于相同的,因为我试图解决这个链路给出: http://www.mysqlfaqs.net/mysql-faqs/Errors/1093-You-can-not-specify-target-table-comments-for-update-in-FROM-clause 但未能如愿...... plz帮助我..
答
你需要加入表的UPDATE语句,而不是使用所有的子查询
UPDATE catalog_product_price cpp
JOIN catalog_product_entity cpe
ON cpe.entity_id = cpp.entity_id
AND cpe.sku LIKE 'sample'
AND website_id = 10
JOIN customer_group cg
ON cg.customer_group_id = cpp.customer_group_id
AND cg.customer_group_code = 100
SET cpp.value = 200
注意:你的语法非常难读,所以我可能犯了一个错误解释它。无论如何,这是主意,它应该帮助你得到最终答案。
答
存放在user defined variables查询的值:
set @value_id := (
SELECT value_id
FROM catalog_product_price
WHERE `entity_id` = (
SELECT `entity_id`
FROM `catalog_product_entity`
WHERE `sku` LIKE 'sample'
);
set @customer_group_id := (
SELECT customer_group_id
FROM catalog_product_price
WHERE `entity_id` = (
SELECT `entity_id`
FROM `catalog_product_entity`
WHERE `sku` LIKE 'sample'
);
UPDATE catalog_product_price
SET catalog_product_price.value = 200
WHERE value_id = @value_id
AND website_id = 10
AND customer_group_id = @customer_group_id;
需要注意的是你的第二个内部查询是废话 - 你选择它的值是已知的,因为该列customer_group_id
where子句WHERE customer_group_id = catalog_product_price.customer_group_id
...完全是多余的