繁体   English   中英

使用别名从视图更新MySQL表

[英]Update MySQL table from view with aliases

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

提前致谢。

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

SELECT e.entity_id AS id,
   v1.value AS name,
   e.sku as 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)
LEFT JOIN mguu_catalog_product_entity_varchar d1 ON (e.entity_id = d1.entity_id)
LEFT JOIN mguu_eav_attribute AS mea ON (v1.attribute_id = mea.attribute_id)
LEFT JOIN mguu_eav_entity_type AS meet ON (meet.entity_type_code = 'catalog_product')
WHERE v1.store_id = 0
AND mea.attribute_code = 'name'
AND mea.entity_type_id = meet.entity_type_id
AND d1.attribute_id = 171;

在MySql文档中:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM