2010-09-21 13 views

cevap

2

nedeni:

WHERE population >= ALL (SELECT population 
          FROM ...) 

:

AND population > 0 

... zorlaştırmaktadır bölge "Avrupa", adı "Vatikan", null satır filtreleyerek edilir. ..NULL bir değer değil, bu yüzden Rusya düzgün bir şekilde sıralanmayacak. TÜM operatör değeri TÜM değerleri NULL orada varken asla olamaz alt sorgu, dönen büyük veya eşit olacak şekilde karşılaştırarak gerektirir.

Benim sorgu olurdu ya:

SELECT region, name, population 
    FROM bbc x 
WHERE population = (SELECT MAX(population) 
         FROM bbc y 
         WHERE y.region = x.region) 

... veya kullanan bir JOIN:

SELECT x.region, x.name, x.population 
    FROM bbc x 
    JOIN (SELECT y.region, 
       MAX(y.population) AS max_pop 
      FROM bbc y 
     GROUP BY y.region) z ON z.region = x.region 
          AND z.max_pop = x.population 
+0

OH, bu nedenle Avrupa NULL nüfus değerlerine sahip tek bölgedir. Anladım. – Hamster

+0

@Hamster: Evet, aksi halde başka bölgelerin de düştüğünü gördünüz. ALL işleci, karşılaştırmakta olduğunuz değerin alt sorgudan döndürülen değerlere TÜM değerlere eşit veya daha büyük olmasını gerektirir; bu, orada bir NULL olduğunda asla gerçekleşemez. –

+0

Ayrıca, NOT NULL seçeneği de var mı? Bu belki daha mantıklı olurdu. – Hamster

0

Hayır öyle değil. En büyük ülke, önceden bilinen bir popülasyona sahip değildir.

En büyük kitabın içinde herhangi bir sayfa olup olmadığını kontrol etmek gibi bir şey.

+1

O @ Hamster sorusuna noktası olduğunu düşünüyorum - maddesinin bir parçası mı SQLzoo sitesinde verilen örnekte – sasfrog

+0

Ayrıca "> 0" yan tümcesini atlarsanız, sorgu farklı sonuçlar döndürür. –

+0

Evet Rusya, onsuz eksik gibi görünüyor. Bunun neden olabileceğini anlayamıyorum. – Hamster

İlgili konular