any, all mySQL
Может кто нибудь обьяснить, почему я три строки получаю. У меня для теста таблица с самолетами и с колличеством мест в самолете. Я для теста колличество мест изменила на 1,2,3...
Моя задача селектировать 3 самолета с самым большим колличеством мест. Например есть самолеты с кол-вом мест 5,4,3,2,1. Мне нужны самолеты 5,4,3. Колличество мест разное.
Мой вариант:
select id, no_seats, type, name from plane
where no_seats = (select max(no_seats) from plane) or no_seats <> all (select max(no_seats) from plane) and no_seats > any(select no_seats from plane);
Я ожидала, с (where no_seats = (select max(no_seats) from plane)) получить самолет 5 мест, с (no_seats <> all (select max(no_seats) from plane) ) отсеивает самолет 5 мест (максимальное), тогда с остатка (no_seats > any(select no_seats from plane)) выберается самолет, который самое большое кол-во мест из остаточных самолетов.
Я ожидала например из самолетов no_seats=1,2,3,4,5. Самолет 5 из за (where no_seats = (select max(no_seats) from plane)
и самолет 4 из за (or no_seats <> all (select max(no_seats) from plane) and no_seats > any(select no_seats from plane).
Но я получаю цамолеты 5,4,3. Почему 3 тоже дацу?
Пусть у нас в таблице 6 самолетов с количеством мест: 1, 2, 3, 4, 5, 5
Expr1:
no_seats = (select max(no_seats) from plane)
Возвращает все самолеты с максимальным количеством мест. (результат: 2 строки с самолетами по 5 мест)
Expr2:
no_seats <> all (select max(no_seats) from plane)
Возвращает все самолеты, количество мест в которых меньше, чем максимальное. (4 строки с самолетами с местами 1, 2, 3, 4)
Expr3:
no_seats > any(select no_seats from plane)
Возвращает все самолеты, количество мест в которых больше, чем минимальное. (5 строк с самолетами с местами 2, 3, 4, 5, 5)
Expr1 OR Expr2 - объеденяет множества и получется 6 строк с самолетами с местами 1, 2, 3, 4, 5, 5
Expr1 OR Expr2 AND Expr3 - вычисляет перечение множеств (Expr1 OR Expr2) и Expr3 - получается 5 строк с самолетами с местами 2, 3, 4, 5, 5