【发布时间】:2017-03-16 13:10:09
【问题描述】:
我有两个具有以下结构的表。
CREATE TABLE `countries` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR (128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
CREATE TABLE `cities` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`country_id` BIGINT UNSIGNED NOT NULL,
`title` VARCHAR (128) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`country_id`) REFERENCES `countries` (`id`) ON DELETE CASCADE
) ENGINE = InnoDB;
然后我在 countries 表中添加 3 行:
INSERT INTO `countries` VALUES
(DEFAULT, 'India'),
(DEFAULT, 'Pakistan'),
(DEFAULT, 'Afghanistan');
现在,当我运行以下查询时:
SELECT c.title, COUNT(c2.id) AS cities
FROM countries AS c
LEFT JOIN cities AS c2
ON c2.country_id = c.id
GROUP BY c2.country_id;
我明白了:
++++++++++++++++++++++++
| title | cities |
++++++++++++++++++++++++
| India | 0 |
++++++++++++++++++++++++
我的期望是:
++++++++++++++++++++++++
| title | cities |
++++++++++++++++++++++++
| India | 0 |
| Pakistan | 0 |
| Afghanistan | 0 |
++++++++++++++++++++++++
我不知道为什么查询只返回左表中的 1 行。有人可以帮忙吗?
【问题讨论】:
-
您需要使用
Group by c.id。如果需要,我愿意给出解释。 -
@1000111 它有效 :) 您能否将其发布为解释性答案,以便我接受。