基本的に、mysqlは、SQL標準で非常に異なるものにVALUESキーワードを使用できるようにする将来の作業への道を切り開くために、values関数の長年の非標準的な使用を削除することを目指しています。これは、VALUES関数がサブクエリでどのように機能するかを示しているためです。 ON DUPLICATEKEYUPDATE句で驚くべきことがあります。
VALUES句にエイリアスを追加してから、ON DUPLICATE KEY UPDATE句の非標準のVALUES関数の代わりに、そのエイリアスを使用する必要があります。変更
INSERT INTO foo (bar, baz) VALUES (1,2)
ON DUPLICATE KEY UPDATE baz=VALUES(baz)
に
INSERT INTO foo (bar, baz) VALUES (1,2) AS new_foo
ON DUPLICATE KEY UPDATE baz=new_foo.baz
(これはmysql 8以降でのみ機能し、古いバージョンまたは少なくとも10.7.1までのmariadbのバージョンでは機能しません)
https://dev.mysql.com/worklog/task/?id=から13325 :