Прежде чем я отправлю свой вопрос, я хотел бы рассказать вам все, что это не дубликат this или that, так как я не хочу решать конкретную проблему, но я хочу понять ее , Читая docs, я вижу две очень интересные примеры аномалий относительно подзапросов внутри update
команды:Обновление подзапроса обновления MySQL
UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
Ошибка является
Ошибка 1093 (ER_UPDATE_TABLE_USED) SQLSTATE = HY000 Сообщение = "Вы не можете указать таблицу целей 'x' для обновления в предложении FROM"
2.
SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)
Ошибка
ОШИБКА 1235 (ER_NOT_SUPPORTED_YET) SQLSTATE = 42000 Message = «Эта версия MySQL не поддерживает«LIMIT & IN/ALL/ANY/НЕКОТОРЫЕ подзапрос ''
Глядя на первый пример, я могу сказать что обновление column2
из t1
может или не может изменить значения column1
, например, из-за триггеров или если столбцы одинаковы. Однако мне интересно, почему MySQL бросает ошибку вместо того, чтобы обычно оценивать подзапрос или, по крайней мере, определять, возможно ли, что результат подзапроса будет изменен update
во время выполнения команды? Что касается второго примера, я действительно не понимаю, почему MySQL не поддерживает этот синтаксис. Я считаю, что это ошибки MySQL, и я задаюсь вопросом, есть ли какой-либо график, когда они будут исправлены.
Если вам не нужна помощь в переписывании запросов, что вы ожидаете от нас? Мы не привязаны к приоритетам и графику MySQL. – Barmar
Я никого не жду. Я задал вопрос, так как считаю, что это интересно. Если кто-нибудь знает ответ, тогда мы все будем проинформированы об этом. Если я буду тем, кто найдет ответ в будущем, тогда я обязательно поделюсь. Вопрос, по общему признанию, сложный, но интересный. –
@ Бармар, у меня недавно была такая проблема и она была решена, но мне было интересно узнать причины. –