【发布时间】:2013-10-11 15:55:44
【问题描述】:
我在查询 6 和 8(如下)时遇到了一些问题。
查询 6: 我还没弄清楚如何获得人口最多的城市的名称。 (其他一切正常)
我需要它做什么: 对于每个国家,列出其任何城市中人口最多的城市以及该城市的名称。订购 结果按国家/地区字母顺序排列。
给出错误: 查询失败:错误:缺少表“city”第 13 行的 FROM 子句条目:ON (city.population = sq.pop) ^
查询 8: 我还没弄清楚如何获得大写名称。 (其他一切正常)
我需要它做什么:对于每个有 5-10 种语言的国家,按降序列出使用的语言数量 语言的数量以及该国家/地区的首都名称。
给出错误: 查询失败:错误:缺少表“城市”第 13 行的 FROM 子句条目:ON (country.capital = city.id) ^
(我不是要求对查询提供完整的解决方案 - 只是修复我拥有的代码的想法)
似乎我需要两个内部连接,但我的语法可能有问题。
单个查询中的两个内连接是否可以接受?
是否存在语法错误? (我检查了在线文档,似乎还可以。但也许我遗漏了一些东西。
有没有比两个内部连接更好的方法来尝试这个?
这里是相关的sn-p代码:(所有其他查询和相关代码都可以正常工作)
elseif($_POST["query"] == "6") //need help getting name of city with max pop (everything else prints fine)
{
$query = "SELECT country.name AS country, largest_city, sq.pop AS population
FROM lab6.country INNER JOIN
(SELECT MAX(city.population) AS pop, country_code
FROM lab6.city
GROUP BY country_code) AS sq
USING (country_code)
INNER JOIN
(SELECT city.name AS largest_city
FROM lab6.city) AS sq1
ON (city.population = sq.pop)
ORDER BY country.name ASC";
}
elseif($_POST["query"] == "8") //need help getting capital name (everything else prints fine)
{
$query = "SELECT country.name, capital, lang_count
FROM lab6.country INNER JOIN
(SELECT count(language) AS lang_count, country_code
FROM lab6.country_language
GROUP BY country_code) AS sq
USING (country_code)
INNER JOIN
(SELECT city.name AS capital, city.id
FROM lab6.city) AS sq1
ON (country.capital = city.id)
ORDER BY lang_count DESC, capital DESC";
}
这已经解决了。这是有效的代码。
elseif($_POST["query"] == "6")
{
$query = "SELECT country.name AS country, largest_city, sq.pop AS population
FROM lab6.country INNER JOIN
(SELECT MAX(city.population) AS pop, country_code
FROM lab6.city
GROUP BY country_code) AS sq
USING (country_code)
INNER JOIN
(SELECT city.name AS largest_city, city.population
FROM lab6.city) AS sq1
ON (sq1.population = sq.pop)
ORDER BY country.name ASC";
}
elseif($_POST["query"] == "8")
{
$query = "SELECT country.name, sq1.capital AS capital, lang_count
FROM lab6.country INNER JOIN
(SELECT count(language) AS lang_count, country_code
FROM lab6.country_language
GROUP BY country_code) AS sq
USING (country_code)
INNER JOIN
(SELECT city.name AS capital, city.id
FROM lab6.city) AS sq1
ON (country.capital = sq1.id)
ORDER BY lang_count DESC, capital DESC";
}
【问题讨论】:
标签: sql database postgresql subquery inner-join