Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在这种情况下,如何执行多个选择操作?_Mysql_Sql_Subquery_Aggregate Functions - Fatal编程技术网

Mysql 在这种情况下,如何执行多个选择操作?

Mysql 在这种情况下,如何执行多个选择操作?,mysql,sql,subquery,aggregate-functions,Mysql,Sql,Subquery,Aggregate Functions,我已经获得了以下关系模式- country (countrycode,name,capital) & population (populationcode,population,countrycode) 其中countrycode是外键w.r.t.关系国家。我必须预测人口最多的国家,但聚合操作MAX(population)不直接适用于给定的命令- SELECT pcode, ccode, name, capital FROM population NATURAL JOIN countr

我已经获得了以下关系模式-

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)
但它应该只说明人口最多的国家的属性,即中国

那么可以执行什么样的操作呢?

简单到:

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

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

不要使用
自然连接
。这是一种令人憎恶的行为,因为它使用的密钥具有相同的名称。它甚至不使用正确声明的外键关系

如果您只查找一行,那么我建议您按订购
限制

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;

当您使用比较最大总体的版本时,您可以获得重复的版本。如果这是您想要的,那么一定要使用该版本。

忘记自然连接构造,指定连接条件!!!还要指定预期的结果!(顺便说一句,你需要一个相关的子查询。)@jarlh我添加了预期的结果。谢谢你的回答,它奏效了。我不知道我必须在WHERE之后使用population=(选择…)。再次感谢