Não tenho ideia de por que não posso usar um INSERT INTO combinado com uma instrução WITH:
drop table if exists testdb.with_insert_into;
create table testdb.with_insert_into (id int);
with test_data as
(select 3 id)
insert into testdb.with_insert_into (id)
select * from test_data;
Estou usando a versão 8.0.41 do MySQL.
Ele gera o erro:
Código de erro: 1064. Você tem um erro na sintaxe do seu SQL; verifique o manual que corresponde à versão do seu servidor MySQL para obter a sintaxe correta a ser usada perto de 'insert into testdb.with_insert_into (id) select * from test_data' na linha 3
Você está perto.
INSERT INTO
precisa vir primeiro, depois oWITH
depois. Parece e é estranho, mas é a ordem correta.Isso funciona: