2014-11-24 15 views
5

mi sono imbattuto in più query che utilizzano il tutto Quantor per una sottoquery max:"dove X> tutti Scegli MAX" vs "dove x> SELECT MAX"

C'è qualche differenza tra

SELECT name FROM bbc 
WHERE population > ALL 
     (SELECT MAX(population) 
      FROM bbc 
     WHERE region = 'Europe') 
    AND region = 'South Asia' 

e

SELECT name FROM bbc 
WHERE population > 
     (SELECT MAX(population) 
      FROM bbc 
     WHERE region = 'Europe') 
    AND region = 'South Asia' 

?

risposta

4

SELECT MAX è un'operazione di aggregazione e, pertanto, la subquery selezionerà una singola riga.

L'applicazione di ALL a una singola riga non avrà alcun effetto.

Se la subquery ha restituito più righe, la versione non ALL genera un errore. Si noti inoltre che quando si utilizza ALL, è possibile rimuovere MAX dalla sottoquery e si otterranno risultati corretti (presumibilmente con le stesse caratteristiche di prestazione).