#sql #sqlite
#sql #sqlite
Вопрос:
Упрощенная версия инструкции, которую я пытаюсь выполнить ( a
, b
и m
— это таблицы, в которых только один столбец содержит целые числа):
SELECT * FROM m WHERE
c1 IN (SELECT * FROM a) OR
c1 IN (SELECT * FROM b)
AND (NOT c1 IN (SELECT * FROM a)
OR c1 IN (SELECT * FROM b));
Я знаю, что это можно было бы сделать проще, но я должен сохранить эту структуру (т. Е., например, не могу присоединиться). Как я мог бы избежать повторения подзапросов после И НЕ, поскольку они вернут тот же набор, что и предыдущие?
Комментарии:
1. Разве sqlite не оптимизирует это?
2. Совсем не уверен. Хотя это было бы интересно узнать.
3. Даже если бы это произошло, вопрос остался бы — помимо оптимизации, вы обычно не хотите иметь повторяющиеся биты кода, которые усложнили бы обслуживание вашего запроса.
4. Мне нужно сделать это в одном операторе. Более того, представления не индексируются в SQLite.