Сколько вложенных запросов позволяет сделать MySQL?

Писал тут запрос и вдруг phpMyAdmin выдает ошибку , что неправильный синтаксис, хотя запросы отдельно выполняются нормально. Вот стало интересно сколько вложенных запросов позволяет делать phpMyAdmin. Вот сам запрос:

В запросе оказалось была синтаксическая ошибка. Но ее исправление никак не помогло. Теперь другую ошибку выдает:

#1093 - You can't specify target table 'spys_table' for update in FROM clause

INSERT INTO `spys_table` (`event`, `event_id`, `date`, `time`, `seans`, `who`, `status`) VALUES('Перестал работать', 1, CURDATE(), CURTIME(), (SELECT SEC_TO_TIME(TIME_TO_SEC(CURRENT_TIME())-TIME_TO_SEC((SELECT `time` FROM `spys_table` WHERE `who` = 159 AND `id` = (SELECT MAX(`id`) FROM `spys_table` WHERE `who` = 159))))), 159, (SELECT `task` FROM `users` WHERE `id` = 159))
  • Вопрос задан
  • 3509 просмотров
Пригласить эксперта
Ответы на вопрос 2
naXa
@naXa
Junior Java(Script) Developer
Интересный вопрос.

В стандарте SQL нет теоретического ограничения на уровень вложенности запросов (количество запросов внутри запроса). Но не стоит забывать, что SQL запрос является строкой, и на него действуют жёсткие ограничения того типа данных, с которым система может работать. Поставщики РСУБД также могут накладывать свои ограничения.

Фактически уровень вложенности зависит от возможностей конкретной РСУБД. Microsoft SQL Server, к примеру, раньше налагал ограничение в 32 вложенных запроса, которое подняли в 2005 версии, а после и вовсе убрали. Но даже сейчас остаются ограничения, которые зависят от сложности запроса и мощности железа (в любом случае бесконечно вкладывать запросы у вас не получится).

В текущей версии Oracle поддерживает до 255 уровней вложенности внутри WHERE и не ограничивает вложенность запросов внутри FROM. DB2, PostgreSQL и MySQL не накладывают ограничений на количество подзапросов, хотя все остальные ограничения (такие как длина SQL запроса) для них действуют. Настольные РСУБД, такие как Access и Open Office BASE, не декларируют, сколько уровней вложенности вы можете использовать, но можете быть уверены, что получите ошибку "the query is too complex", если поместите 40 подзапросов в один запрос.

(Отрывок из Discovering SQL: A Hands-On Guide for Beginners, Alex Kriegel, стр. 170)
Ответ написан
@hedint
Web разработчик
Mysql обычно сообщает, на каком месте парсер поломался (либо пишет другую ошибку, не связанную с синтаксисом).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы