我希望获得包含car
数据的carName
数据的唯一一行,以及此车makerName
和plateNumber
的值(如果存在)。
例如Ford Taurus, Ford, 4AD843
。
如果由于某种原因Ford Taurus
没有板号,我想在板号列中找到没有值的这一行,例如
Ford Taurus, Ford, null.
我尝试了下面的sql
,但我得到了所有maker
和license
表的所有值,如果我在where
子句中添加car.id
子句的约束{1}}和maker
表中的{1}}如果license
中的值为license
,我会获得0行。
那怎么办呢?
我尝试了什么:
null
答案 0 :(得分:1)
您应该使用SQL LEFT JOIN
关键字,它返回左表(car
)中的所有行,右表(maker
或license
中的匹配行)。当没有匹配时,结果是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
条件将无法获取所需的结果。