我正在尝试从使用别名创建的SQL视图更新MySQL中的行。我不知道这是否可能。
原始SQL如下所示。我已将其另存为“ ProductVersion”视图。
SELECT e.entity_id AS id,
v1.value AS name,
e.sku,
d1.value AS version
FROM mguu_catalog_product_entity e
LEFT JOIN mguu_catalog_product_entity_varchar v1 ON e.entity_id = v1.entity_id
AND v1.store_id = 0
AND v1.attribute_id =
(SELECT attribute_id
FROM mguu_eav_attribute
WHERE attribute_code = 'name'
AND entity_type_id =
(SELECT entity_type_id
FROM mguu_eav_entity_type
WHERE entity_type_code = 'catalog_product'))
LEFT JOIN mguu_catalog_product_entity_varchar d1 ON e.entity_id = d1.entity_id
AND d1.attribute_id = 171;
现在,我想从该视图执行MySQL UPDATE,所以我尝试:
mysqli_query($db, "UPDATE ProductVersion SET version = '123123123' WHERE sku = '1003'");
这不会返回任何错误-但是不会更新。我也尝试过这样,但这会产生错误:
mysqli_query($db, "UPDATE ProductVersion SET d1.value = '123123123' WHERE e.sku = '1003'");
是否有可能从视图中进行MySQL UPDATE,如果没有,如何从原始SQL中最简单地完成它?
谢谢。
答案 0 :(得分:0)
我不知道这是否可以解决问题,但我认为您可以简化View的操作(减少无用的select语句):
git status
在MySql文档中:
UPDATE:UPDATE语句中要更新的表可能是合并的视图引用。如果视图是联接视图,则该视图的至少一个组件必须是可更新的(这与INSERT不同)。
在多表UPDATE语句中,该语句的更新表引用必须是基表或可更新视图引用。未更新的表引用可以是物化视图或派生表。
https://dev.mysql.com/doc/refman/8.0/en/view-updatability.html