SQL: требуется объяснение «ВСЕ» - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь обернуть голову вокруг «Все» при использовании с оператором.

В настоящее время я понимаю, что внутренний запрос возвращает подмножество, в котором внешний запрос использует ALL,как внешний запрос может сказать, что каждый

SELECT playerno, leagueno
FROM Players
WHERE playerno >= ALL(select playerno FROM Players WHERE leagueno IS NOT NULL)

Я пытаюсь выяснить, как это работает.Внутренний запрос возвращает, например, (1,2,3), тогда откуда он знает, что playerno должен быть больше или равен 3, а не только 2?Я предполагаю, что ВСЕ означает, что проверяется каждое значение, что также означало бы, что playerno больше 1 или 2 будет достаточно для удовлетворения условия и, следовательно, может использоваться в выражении WHERE, даже если это не то, что мы хотимтак как мы хотим только наибольшее число.

1 Ответ

2 голосов
/ 12 июня 2019

Запрос:

SELECT playerno, leagueno
FROM Players
WHERE playerno >= ALL(select playerno FROM Players WHERE leagueno IS NOT NULL)

эквивалентно:

SELECT playerno, leagueno
FROM Players
WHERE playerno >= (SELECT MAX(playerno) FROM Players WHERE leagueno IS NOT NULL)
-- assumption: playerno is defined as NOT NULL

Это означает, что playerno должен быть больше или равен для каждого Playerno, где определена лига.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...