Обновить таблицу MySQL из представления с псевдонимами - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь обновить строки в MySQL из представления SQL, созданного с использованием псевдонимов.Я не знаю, возможно ли это вообще.

Оригинальный 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 из этого представления, поэтому я попытался:

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 голосов
/ 11 апреля 2019

Я не знаю, решит ли это проблему, но я думаю, что вы можете упростить свой 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, могут быть ссылками представления, которые объединены. Если представление является представлением объединения, по крайней мере один компонент представления должен быть обновляемым (это отличается от INSERT).

В операторе UPDATE для нескольких таблиц обновленные ссылки на таблицы оператора должны быть базовыми таблицами или обновляемыми ссылками на представления. Не обновленные ссылки на таблицы могут быть материализованными представлениями или производными таблицами.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...