2014-03-01 65 views
0

我試圖解決這個http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial 一些任務,在最後一個任務(8號),我寫了一個查詢:爲什麼此查詢不適用於這種情況?

select name, continent from world a 
where a.population > 
(select 3*max(population) from world b 
where b.continent = a.continent) 

但此查詢不返回任何行。但工作幾乎相同的查詢(只是在子查詢的末尾添加了一個額外的條件)。但是,這是怎麼回事?即使國家名稱相同,它爲什麼不返回原始數據?

select name, continent from world a 
where a.population > 
(select 3*max(population) from world b 
where b.continent = a.continent and a.name <> b.name) 
+0

你不能在子查詢中使用表別名'a' ..你試圖得到什麼輸出? – Manu

+0

實際上,他可以在子查詢的父查詢中使用列。 –

+0

看看在這兩種情況下子查詢中包含的條目,並注意差異, - ) – Sirko

回答

0

讓我翻譯一下這兩個查詢對英文的影響,這樣你就可以認識到差異。

第一查詢;比較並獲得所有在同一大陸的國家,並且擁有該大陸人口最多的國家的3倍以上。

第二查詢;比較並獲得所有在同一大陸的國家,並且擁有超過自己以外的歐洲大陸人口最多的國家的3倍。

在您的第一個查詢中,如果最大填充國家/地區本身就是最大填充國家/地區,那麼填充國家/地區的填充國家/地區不能超過自己的3倍,因此您的查詢返回0結果。

但在第二個查詢中,除了同一大陸的其他國家外,人口最多的國家除外自己可以擁有人口的3倍。

+0

我知道。但是爲什麼它在第一個查詢的情況下返回0行?同一個國家擁有最多的人口是沒有必要的。我只是不明白。 – Litwisha

+0

如果您在第二個查詢中添加相同的國家/地區,請選擇無法找到子查詢中填充國家較少的情況,因爲父查詢的國家/地區也在子查詢中,並且如果他是最大填充國家/地區,他可以擁有最多同一人口不少於 –

+0

讓我說明 人口10萬第一個國家和最大的在他的大陸 在子查詢最大人口將返回爲10萬和10mil> 10mil將比較返回false因此0結果 –

相關問題