2017-10-11 98 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; 

当您使用的版本相比最大的人群,那么你就可以得到重复。如果这是你想要的,那么肯定会使用该版本。