MySQL 5.7 не может обновить обновляемую часть левого представления соединения - PullRequest
0 голосов
/ 25 июня 2018

Следующее работает в 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 может фактически обработать запрос с помощью левого соединения.Есть ли веская причина для отказа в обновлении, или это был какой-то указатель на документацию, который добавил исключение для левых объединений только потому, что они "внешние"?

...