Приветствую.
Не получается использовать row_alias на вставке с выборкой из другой таблицы.
Структура:
CREATE TABLE IF NOT EXISTS `a` (
`f` int DEFAULT NULL,
`c` datetime DEFAULT NULL,
`u` datetime DEFAULT NULL,
UNIQUE KEY `uniqF` (`f`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Запрос:
INSERT INTO `a` (`f`,`c`) AS `row_alias`
SELECT 1, NOW()
ON DUPLICATE KEY UPDATE `u` = `row_alias`.`c`;
Фиддл (не запустится, т.к. старая версия MySQL):
https://www.db-fiddle.com/f/sYYH4VQ6EcaAs8dGSQTCSf/2
Доки (искать по "row_alias" и "row alias"):
https://dev.mysql.com/doc/refman/8.0/en/insert.html
https://dev.mysql.com/doc/refman/8.0/en/insert-on-...
Запрос должен работать с 8.0.19, у меня 8.0.21, выдает ошибку синтаксиса:
[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `ins`' at line 11
Я бы с удовольствием использовал
INSERT INTO `a` (`f`,`c`)
SELECT 1, NOW()
ON DUPLICATE KEY UPDATE `u` = VALUES(`c`);
...eсли бы не:
[HY000][1287] 'VALUES function' is deprecated and will be removed in a future release. Please use an alias (INSERT INTO ... VALUES (...) AS alias) and replace VALUES(col) in the ON DUPLICATE KEY UPDATE clause with alias.col instead
...который выбрасывает эксепшен в PDO:
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error in C:\Code\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOStatement.php:258
ЧЯДНТ?