2017-10-11 97 views
1

我已經提供了以下關係模式 -在這種情況下如何做多個選擇操作?

country (countrycode,name,capital) & 
population (populationcode,population,countrycode) 

哪裏COUNTRYCODE是外鍵w.r.t.關係國家。我必須用最大的人口來投射這個國家,但是聚合操作MAX(population)對於給定的命令並不直接工作 - 。

SELECT pcode, ccode, name, capital 
FROM population NATURAL JOIN country 
WHERE ((SELECT MAX(population) as maxpopulation FROM population NATURAL JOIN country)) 

對於給定的一組數據 -

INSERT INTO country VALUES(1,'INDIA','NEW DELHI'); 
INSERT INTO country VALUES(2,'U.S.A.','WASHINGTON DC'); 
INSERT INTO country VALUES(3,'U.K.','LONDON'); 
INSERT INTO country VALUES(4,'CHINA','BEIJING'); 
INSERT INTO country VALUES(5,'JAPAN','TOKYO'); 

INSERT INTO population VALUES(1,1200000000,1); 
INSERT INTO population VALUES(2,350000000,2); 
INSERT INTO population VALUES(3,65640000,3); 
INSERT INTO population VALUES(4,1300000000,4); 
INSERT INTO population VALUES(5,127000000,5); 

由於它是製造在終端下面的輸出 -

+-------+-------+--------+---------------+ 
| pcode | ccode | name | capital  | 
+-------+-------+--------+---------------+ 
|  1 |  1 | INDIA | NEW DELHI  | 
|  2 |  2 | U.S.A. | WASHINGTON DC | 
|  3 |  3 | U.K. | LONDON  | 
|  4 |  4 | CHINA | BEIJING  | 
|  5 |  5 | JAPAN | TOKYO   | 
+-------+-------+--------+---------------+ 
5 rows in set (0.00 sec) 

和期望輸出是 -

+-------+-------+--------+---------------+ 
| pcode | ccode | name | capital  | 
+-------+-------+--------+---------------+ 
|  4 |  4 | CHINA | BEIJING  | 
+-------+-------+--------+---------------+ 
1 rows in set (0.00 sec) 

但它應該onl y告訴中國人口最多的國家屬性。

那麼可以進行哪種操作?

+1

忘記NATURAL JOIN構造,指定連接條件! – jarlh

+0

指定預期的結果! (順便說一句,你需要一個相關的子查詢。) – jarlh

+0

@jarlh我添加了預期的結果。 –

回答

1

簡單:

SELECT pcode, ccode, name, capital 
FROM population NATURAL JOIN country 
WHERE population = (SELECT MAX(population) FROM population) 
+0

謝謝你的回答。我不知道我必須使用population =(SELECT ....)在WHERE之後。再次感謝 –

0

WHERE使用子查詢和使用LIMIT功能。

SELECT p.populationcode, c.countrycode, c.name, c.capital 
FROM population p 
INNER JOIN country c ON p.countrycode = c.countrycode 
WHERE (SELECT countrycode 
     FROM (SELECT countrycode, population 
      FROM population 
      ORDER BY population DESC LIMIT 1)) = c.countrycode 
1

請勿使用NATURAL JOIN。這是一種憎惡,因爲它使用與名稱相同的密鑰。它甚至不使用正確聲明的外鍵關係。

如果你正在尋找只有一排,然後我會建議ORDER BYLIMIT

select p.populationcode, p.countrycode, c.name, c.capital 
from population p join 
    country c 
    using (countrycode) -- of course, the traditional explicit "on" is totally correct too 
order by p.population desc 
limit 1; 

當您使用的版本相比最大的人羣,那麼你就可以得到重複。如果這是你想要的,那麼肯定會使用該版本。