Практикуя написание SQL-запросов, я заметил, что не могу выполнять запросы в форме, подобной этой:
(1)
SELECT attr1, attr2 FROM
(SELECT attr1, attr2 FROM ...) AS table
WHERE attr1 >= ALL
(SELECT attr1 FROM table)
Идея в (1), что я выбираю из внутреннего запроса с псевдонимом «таблица».Я также хочу добавить предложение WHERE, чтобы применить сравнения и получить желаемый результат запроса.Поэтому я сравниваю атрибут с атрибутами из «таблицы».
В этом конкретном случае я выбираю все атрибуты attr1, которые получают максимальное значение в результате внутреннего запроса, которому присвоен псевдоним «таблицы».
Однако приведенный выше пример не работает, и я получаю сообщение об ошибке.
Я понимаю, что если я сделаю что-то подобное ниже, я получу результат запроса:
(2)
SELECT attr1, attr2 FROM
(SELECT attr1, attr2 FROM ...) AS alias1
WHERE attr1 >= ALL
(SELECT attr1 FROM ...)
, где два внутренних запроса одинаковы, за исключением того факта, что attr2 отсутствует во втором.
Моя единственная проблема с query (2) заключается в том, что если внутренний запрос довольно длинный, то вы по сути копируете и вставляете большой кусоккода для повторного использования в соответствии с предложением WHERE.
Мой вопрос заключается в том, почему запрос (1) недействителен и есть ли более эффективные альтернативы запросу (2).