クエリ 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";
}