我在下面提到的查詢中運行。MySQL - 使用LEFT JOIN進行查詢並通過不返回行數進行計數0
select c.id, c.code, c.name, count(a.iso_country) from countries c
left join airports a on c.code = a.iso_country group by a.iso_country
order by count(a.iso_country);
在我的'國家'表中,我有247行。 在「機場」表中,'iso_country'列映射到'國家/地區'表中的'代碼'列。
以下是表格的定義。 Countries表 -
CREATE TABLE `countries` (
`id` int(11) NOT NULL,
`code` varchar(2) NOT NULL,
`name` text,
`continent` text,
PRIMARY KEY (`id`),
UNIQUE KEY `code_UNIQUE` (`code`),
KEY `code_idx` (`code`)
)
機場表 -
CREATE TABLE `airports` (
`id` int(11) NOT NULL,
`type` text,
`name` text,
`continent` text,
`iso_country` varchar(2) DEFAULT NULL,
`iso_region` text,
PRIMARY KEY (`id`),
KEY `country_iso_code_fk_idx` (`iso_country`),
CONSTRAINT `country_fk` FOREIGN KEY (`iso_country`) REFERENCES `countries`
(`code`))
我現在面臨的問題是 - 我上面提到的查詢返回242個國家 - 241個國家與機場和1空值「機場',但不包括其他5個國家誰也沒有任何機場。請指導我在這個查詢中做錯了什麼。
PS: - 我只是SQL的新手。
我在MySQL 5.7社區版上運行。 在此先感謝。
爲什麼你組呢??:
試試這個你想按國家分組嗎? –
@MohammadMirzaeyan - 是的,我想爲每個國家的機場數。 「機場」表的'iso_country'列映射到'國家'表的'代碼'列。 –
所以我認爲首先最好是通過'國家'表上的代碼字段進行分組,然後使用'count(*)'來修改您的訂單,而不是'count(a.iso_country)' –