当某些字段为空时,在连接中出现问题

时间:2016-09-15 07:08:56

标签: mysql sql database

我希望获得包含car数据的carName数据的唯一一行,以及此车makerNameplateNumber的值(如果存在)。

例如Ford Taurus, Ford, 4AD843

如果由于某种原因Ford Taurus没有板号,我想在板号列中找到没有值的这一行,例如

Ford Taurus, Ford, null.

我尝试了下面的sql,但我得到了所有makerlicense表的所有值,如果我在where子句中添加car.id子句的约束{1}}和maker表中的{1}}如果license中的值为license,我会获得0行。

那怎么办呢?

我尝试了什么:

null

3 个答案:

答案 0 :(得分:1)

您应该使用SQL LEFT JOIN关键字,它返回左表(car)中的所有行,右表(makerlicense中的匹配行)。当没有匹配时,结果是NULL在右侧。

SELECT car.id AS carID
    , maker.name AS makerName
    , license.plateNumber AS plateNumber 
FROM car AS car
LEFT JOIN maker AS maker ON car.id = maker.carId
LEFT JOIN license AS license ON car.id = license.carId
WHERE car.id = 4951

答案 1 :(得分:0)

好像您正在寻找left join

SELECT
    car.id AS carID,
    maker.carId AS makerCarId, maker.name AS makerName, 
    license.carId AS licenseCarId, license.plateNumber AS plateNumber 
FROM
    car
JOIN
    maker ON car.id = maker.carId
LEFT JOIN
    license ON car.id = license.carId 
where car.id = 4951

答案 2 :(得分:0)

您的查询结果是表格汽车,制造商和许可证之间的笛卡尔联接。 这将导致所有行都具有WHERE子句中提供的car id。

对于您的预期结果,您需要使用查询中使用的表之间的过滤器或连接条件来优化结果集。

使用以下查询获得预期结果:

SELECT car.id AS carID , maker.name AS makerName , license.plateNumber AS plateNumber FROM car AS car JOIN maker AS maker ON car.id = maker.carId LEFT OUTER JOIN license AS license ON car.id = license.carId WHERE car.id = 4951;e

我已添加条件OUTER JOIN以获得所需的结果,即使没有牌照也是如此。如果没有汽车的车牌号,仅使用JOIN条件将无法获取所需的结果。

相关问题