简单的内部连接不起作用

时间:2016-04-14 23:54:19

标签: mysql sql

我正在尝试查询CONTINENT为“亚洲”的所有城市的人口总和。 两个表CITY和COUNTRY如下,

city - id, countrycode, name population
country - code, name, continent, population

这是我的查询

SELECT SUM(POPULATION) FROM COUNTRY CITY
JOIN ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE CONTINENT = "Asia";

这不起作用。我究竟做错了什么。我是SQL的新手。

10 个答案:

答案 0 :(得分:3)

它无效,因为您编写CITY的方式被解释为COUNTRY的表别名。此外,您似乎在每个表中都有一个POPULATION列,因此您需要消除它的歧义。让我为你重写一下这个问题:

SELECT SUM(CITY.POPULATION)
FROM COUNTRY
JOIN CITY
ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE COUNTRY.CONTINENT = "Asia";

答案 1 :(得分:2)

我知道问题已经回答,但我想提出优化的解决方案。下面的解决方案将减少执行时间,同时减少执行SQL查询的资源。

select sum(a.population) from city a
inner join(select * from country where continent = 'Asia') b
on a.countrycode=b.code;

我想在此之上再作一点解释,因为您看到我在执行Join操作之前正在应用过滤条件。因此,在改组阶段,数据将非常少,因此查询将花费更少的时间来执行。在较小的数据量中不会看到性能的急剧变化,但是在大型数据集中运行此查询时,可以看到性能的提高。

答案 2 :(得分:1)

MySQL JOIN syntax manual

SELECT SUM(COUNTRY.POPULATION) 
FROM COUNTRY
JOIN CITY
ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE CONTINENT = "Asia";

答案 3 :(得分:1)

JOIN需要在两个表名之间进行:

SELECT SUM(CITY.POPULATION) FROM COUNTRY INNER JOIN CITY
ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE CONTINENT = "Asia";

答案 4 :(得分:1)

SELECT sum(city.population) FROM city LEFT JOIN country ON city.countrycode=country.code
WHERE country.continent='Asia'

答案 5 :(得分:0)

SELECT SUM(CITY.POPULATION) 
FROM CITY          
INNER JOIN COUNTRY ON  CITY.COUNTRYCODE = COUNTRY.Code 
where COUNTRY.CONTINENT = 'Asia';

第3行具有INNER JOIN,因为两个表中都有一列是两者共有的

答案 6 :(得分:0)

您可以使用Oracle运行以下代码。

SELECT SUM(c.POPULATION)
FROM CITY c
     INNER JOIN COUNTRY co  ON c.CountryCode = co.Code
     WHERE CONTINENT ='Asia' ;

答案 7 :(得分:0)

select SUM(cty.POPULATION) from COUNTRY cntry, CITY cty where cty.COUNTRYCODE=cntry.CODE AND cntry.CONTINENT='Asia';

答案 8 :(得分:0)

select sum(S.Population)
from City S
where S.CountryCode in (select Code
                       from Country C
                       where CONTINENT = 'Asia');

答案 9 :(得分:-1)

请参阅以下示例代码:

SELECT SUM(A.POPULATION)
FROM CITY A
JOIN COUNTRY B
ON A.COUNTRYCODE = B.CODE
WHERE B.CONTINENT = 'Asia';``