使用别名从视图更新MySQL表

时间:2019-04-11 09:33:06

标签: php mysql mysqli

我正在尝试从使用别名创建的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中最简单地完成它?

谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道这是否可以解决问题,但我认为您可以简化View的操作(减少无用的select语句):

git status

在MySql文档中:

UPDATE:UPDATE语句中要更新的表可能是合并的视图引用。如果视图是联接视图,则该视图的至少一个组件必须是可更新的(这与INSERT不同)。

在多表UPDATE语句中,该语句的更新表引用必须是基表或可更新视图引用。未更新的表引用可以是物化视图或派生表。

https://dev.mysql.com/doc/refman/8.0/en/view-updatability.html