我有两个表:Vehicles(Id, VIN) 和 Images(Id, VehicleId, Name, Default)。我需要选择要在表格中显示的车辆 VIN 及其默认图片。我遇到的问题是,如果未设置默认图片,我仍然想选择要显示的图片(如果存在)。如果没有图像存在,车辆信息显然也必须显示。这是我目前所拥有的:
SELECT
Vehicles.Id, Vehicles.VIN, Images.Name AS Image,
(SELECT COUNT(*) FROM Images WHERE VehicleId = Vehicles.Id) AS ImageCount
FROM
Vehicles
LEFT JOIN
Images ON Images.VehicleId = Vehicles.Id
WHERE
Images.Default = 1
此语句将显示具有默认图像的车辆,但如果未设置默认图像则不会显示任何内容。我需要更改什么?
编辑*
为了更好地描述我的问题,这里有一些测试数据:
VEHICLES:
ID VIN
1 12341234123412341
2 23452345234523452
3 34534534534534534
IMAGES:
ID VEHICLEID NAME DEFAULT
1 1 a 1
2 1 b 0
3 2 c 0
4 2 d 0
即使车辆 2 没有默认值,我也希望它选择要显示的图像。此外,车辆 3 根本没有图像,但我仍然需要它在没有图像的情况下显示在表格中。车辆 1 将显示其默认图像,因为它已设置。我希望这能解决问题。
最佳答案
WHERE Images.Default = 1 或 Images.Default IS NULL
where 子句将左连接转变为内连接,因为它需要匹配的记录来满足条件。
关于MySQL 复杂的 JOIN 问题 - 无法获得正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1273644/