У меня есть сценарий SQL (в настоящее время работает на SQLite, но, вероятно, он должен работать на любом механизме БД), который использует один и тот же подзапрос дважды, и, поскольку он может извлекать много записей (таблица содержит пару миллионов строк ) Я хотел бы позвонить только один раз.
Сокращенная псевдо-версия запроса выглядит следующим образом:
SELECT * FROM
([the subquery, returns a column of ids]) AS sq
[a couple of joins, that fetches things from other tables based on the ids]
WHERE thisorthat NOT IN ([the subquery again])
Я пытался просто использовать имя (sq
) различными способами (с / без скобок, с / без именования столбца sq и т. Д.), Но безрезультатно.
У меня действительно есть , чтобы повторить этот подзапрос?
Пояснение:
Я делаю это в python и sqlite как небольшую демонстрацию того, что можно сделать 1016 *, но я бы хотел, чтобы мое решение масштабировалось как можно лучше с минимальными изменениями, насколько это возможно. В реальной ситуации в базе данных будет несколько миллионов строк, но в моем примере всего 10 строк с фиктивными данными. Таким образом, код, который будет хорошо оптимизирован, например, для MySQL , абсолютно достаточно хорош - его не нужно оптимизировать специально для SQLite . Но, как я уже сказал, чем меньше нужно модификаций, тем лучше.