MySQL 复杂的 JOIN 问题 - 无法获得正确的结果

标签 mysql left-join

我有两个表: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/

相关文章:

mysql - 删除数据后释放 MyISAM 表空间

php - 使用 PHP 创建一个高效的好友列表

mysql - SQL左连接问题

mysql - 三张表的两次求和和内连接的SQL语句

mysql - Laravel 5.2 - 在子查询上使用 Left Join 时出现奇怪的结果

oracle - 用于外连接 (+) 的旧 Oracle 语法是否始终等同于新语法?

mysql - LOAD DATA LOCAL INFILE 找不到路径

Mysql IMAGE表设计

mysql - 如何在Mysql中使用DATE过滤重复的行

php - 像 shell_exec ("echo %username%"之类的查询)不起作用