Подзапросы в SQL

Материал из Eludia
Перейти к: навигация, поиск

Ни в коем случае не используйте конструкции типа 'WHERE id = ANY (SELECT ...)', 'WHERE id IN (SELECT ...)' и им подобные в MySQL! Там они реализованы совершенно неприемлемо: подзапрос всегда считается коррелированным и, соответственно, исполняется заново на каждую строку основной выборки, даже если не зависит от её полей. Зато в MySQL отлично работают фильтры по списку значений: 'id IN (-1, ...)'.

В Oracle и MS SQL ситуация обратная: константные подзапросы опознаются корректно, а вот длинные списки id могут создать проблемы с кэшированием лишних планов запросов.

По-хорошему следует подставлять в IN() результат функции sql_select_ids: в зависимости от СУБД она вернёт либо список id, либо исходник подзапроса.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты