Следующее работает в Mysql 5.6.40, но не в 5.7.20:
create table test
select 1 as id, 'a' as data;
create or replace view v_test as
select t.* from test t
left join test t1 using (id); -- doesn't have to be the same table, only used for simplicity
update v_test set data = 'b';
ОШИБКА 1288 (HY000) в строке 1: целевая таблица v_test ОБНОВЛЕНИЯ не обновляется
Кажется, что левая часть соединения вызывает ошибку.Однако обновление выполняется в левой части объединения, поэтому не должно быть никаких причин его запрещать.Более того, работает следующее:
create or replace view v_test_ as
select t.* from test t
join v_test using (id);
update v_test_
set data = 'b';
Это означает, что mysql может фактически обработать запрос с помощью левого соединения.Есть ли веская причина для отказа в обновлении, или это был какой-то указатель на документацию, который добавил исключение для левых объединений только потому, что они "внешние"?