Fondamentalmente, mysql sta cercando di rimuovere un uso non standard di lunga data della funzione valori per aprire la strada ad alcuni lavori futuri in cui lo standard SQL consente di utilizzare una parola chiave VALUES per qualcosa di molto diverso, e perché il modo in cui la funzione VALUES funziona nelle sottoquery o meno in una clausola ON DUPLICATE KEY UPDATE può essere sorprendente.
È necessario aggiungere un alias alla clausola VALUES e quindi utilizzare tale alias invece della funzione VALUES non standard nella clausola ON DUPLICATE KEY UPDATE, ad es. cambia
INSERT INTO foo (bar, baz) VALUES (1,2)
ON DUPLICATE KEY UPDATE baz=VALUES(baz)
a
INSERT INTO foo (bar, baz) VALUES (1,2) AS new_foo
ON DUPLICATE KEY UPDATE baz=new_foo.baz
(Funziona solo su MySQL 8+, non su versioni precedenti o in qualsiasi versione di mariadb almeno fino alla 10.7.1)
Da https://dev.mysql.com/worklog/task/?id=13325 :