如何获取 MySQL 中左连接中关联行的计数?
题
我有两张桌子,一张 vehicle
包含列的表:
id
stock
year
make
model
和 images
包含列的表:
id
vehicle_id
name
caption
default tinyint(1)
我正在尝试列出车辆的信息、其默认图像以及车辆拥有的图像总数。目前我正在使用以下 SELECT
陈述:
SELECT vehicle.id, vehicle.stock, vehicle.year,
vehicle.make, vehicle.model, images.name,
COUNT(images.id)
FROM vehicle
LEFT JOIN images
ON vehicle.id = images.vehicle_id
我最初使用的是:
ON vehicle.id = images.vehicle_id AND images.default = 1
但图像计数将仅为 1 或 0,具体取决于数据库中是否有默认图像。我尝试过使用 UNION
和别的 SELECT
声明,但我仍然无法得到正确的结果。我需要使用两个吗 SELECT
语句或者有其他方法来处理它 JOIN
或者 UNION
?
解决方案
SELECT
`vehicle`.`id`,
`vehicle`.`stock`,
`vehicle`.`year`,
`vehicle`.`make`,
`vehicle`.`model`,
`images`.`name`,
(
SELECT COUNT(*)
FROM `images`
WHERE `vehicle_id` = `vehicle`.`id`
) AS `image_count`
FROM `vehicle`
LEFT JOIN `images`
ON `images`.`vehicle_id` = `vehicle`.`id`
WHERE `images`.`default`
其他提示
按照回答者建议的方式,您会得到“车辆”的重复值。更好的方法是将结果分组。尝试不使用 JOIN :
SELECT
`vehicle`.`id`,
`vehicle`.`stock`,
`vehicle`.`year`,
`vehicle`.`make`,
`vehicle`.`model`,
`images`.`name`,
(
SELECT COUNT(*)
FROM `images`
WHERE `vehicle_id` = `vehicle`.`id`
) AS `image_count`
FROM `vehicle`
WHERE `images`.`default`
小编就给大家说清楚吧!
任务: :打印 3 列表格:
- 车辆(标题)来自 汽车 桌子。
- 每辆车的评论数量 评论 桌子。
- 每辆车的图像数量来自 图片 桌子。
预期输出(仅作为示例):
+----------------------+----------------+--------------+
| title | comments_count | images_count |
+----------------------+----------------+--------------+
| BMW X6 | 35 | 9 |
| Audi A6 | 3 | 5 |
| Volkswagen Passat B6 | 78 | 6 |
| Volkswagen Passat B5 | 129 | 4 |
+----------------------+----------------+--------------+
解决方案:
SELECT
vehicles.title,
(SELECT COUNT(*) FROM comments WHERE vehicles.id = comments.vehicle_id) AS comments_count,
(SELECT COUNT(*) FROM images WHERE vehicles.id = images.vehicle_id) AS images_count
FROM vehicles
不隶属于 StackOverflow