php - 使用别名从视图中更新 MySQL 表
问题描述
我正在尝试从使用别名创建的 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 中最简单地完成?
提前致谢。
解决方案
我不知道这是否能解决问题,但我认为你可以像这样简化你的视图(少用无用的选择语句):
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/en/view-updatability.html
推荐阅读
- cordova - 你能得到你的设备和科尔多瓦蓝牙设备之间的距离吗
- konvajs - 在 KonvaJS 中应用缩放(比例)进行文本编辑
- wcf - WCF 服务客户端生成名称空间问题
- r - 用 gsub R 替换文本
- java - Spring Boot - NoClassDefFoundError: javax/servlet/Filter && 尝试使用 Netty 时无法启动 ServletWebServerApplicationContext
- javascript - Highcharts:实时更新样条图将y轴数据设置为零
- r - 将数据转换为将行移动到列
- laravel - 通过代码登录似乎在 laravel 中不起作用
- typo3 - TYPO3 流体动态键输入参数
- java - Gradle 忽略 testng 中的优先级