0

クエリ 6 と 8 (下記) で問題が発生しています。

クエリ 6: 人口が最も多い都市の名前を取得する方法がわかりません。(他のすべてが機能します)

必要なこと:国ごとに、その都市の最大人口とその都市の名前をリストします。結果を国別にアルファベット順に並べます。

次のエラーが表示されます:クエリが失敗しました: エラー: テーブル "city" の FROM 句のエントリがありません LINE 13: ON (city.population = sq.pop) ^

クエリ 8: 首都名を取得する方法がわかりません。(他のすべてが機能します)

必要なこと: 5 ~ 10 の言語がある国ごとに、話されている言語の数を言語数の多い順にリストし、その国の首都の名前も示します。

次のエラーを返します: Query failed: ERROR: missing FROM-clause entry for table "city" LINE 13: ON (country.capital = city.id) ^

(クエリの完全な解決策を求めているわけではありません。コードを修正するためのアイデアです)

両方に 2 つの内部結合が必要なようですが、構文に問題がある可能性があります。

1 つのクエリで 2 つの内部結合を使用できますか?

構文エラーはありますか? (オンライン ドキュメントを確認しましたが、問題ないようです。しかし、何か不足している可能性があります)。

2 つの内部結合よりもこれを試みる良い方法はありますか?

コードの関連スニペットは次のとおりです: (他のすべてのクエリと関連コードは正常に動作します)

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

1 に答える 1

2

テーブル名「市」は、派生テーブルのエイリアス「sq1」によって上書きされます

そのはず:

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