0

I am having some trouble with queries 6 and 8 (below).

Query 6: I haven't figured out how to get the name of the city with the largest population. (everything else works)

What I need it to do: For each country, list the largest population of any of its cities and the name of that city. Order the results alphabetically by country.

Gives error: Query failed: ERROR: missing FROM-clause entry for table "city" LINE 13: ON (city.population = sq.pop) ^

Query 8: I haven't figured out how to get the capital name. (everything else works)

What I need it to do: For each country with 5-10 languages, list the number of languages spoken, in descending order by number of languages as well as the name of the capital for that country.

Gives error: Query failed: ERROR: missing FROM-clause entry for table "city" LINE 13: ON (country.capital = city.id) ^

(I'm not asking for a complete solution to the queries - just an idea to fix the code I have)

It seems like I need two inner joins on both of them, but maybe something is wrong with my syntax.

Are two inner joins in a single query acceptable?

Is there a syntax error? (I have checked the online documentation, and it seems okay. But maybe I am missing something).

Is there a better way to attempt this than two inner joins?

Here is the relavent snippet of the code: (all other queries and related code works properly)

    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";
    }

This was solved. Here is the code that worked.

    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";
    }
4

1 回答 1

2

表名“city”被派生表别名“sq1”覆盖

它应该是:

 (SELECT city.name AS capital, city.id
    FROM lab6.city) AS sq1
    ON (country.capital = sq1.id)
于 2013-10-04T17:06:35.320 回答