【问题标题】:I need to show all cars from BRAND_CAR even if there is no car in it我需要显示来自 BRAND_CAR 的所有汽车,即使其中没​​有汽车
【发布时间】:2019-10-31 18:31:31
【问题描述】:

我创建了这个查询,即使在车辆表上创建了 0 个车辆,我也无法显示所有品牌汽车。

SELECT BRAND_CAR_NAME, COUNT(*)
FROM brand b, vehicule v, model mo
WHERE v.ID_MODEL = mo.ID_MODEL
AND mo.ID_BRAND = b.ID_BRAND
GROUP BY BRAND_CAR_NAME

它告诉我什么:

Brand 1 :   1
Brand 3 :   1 
Brand 4 :   1
Brand 6 :   1

我想看看:

            Brand 1 : 1
            Brand 3 : 1 
            Brand 4 : 1
            Brand 6 : 1
            brand 2 : 0
            brand 5 : 0
            brand 7 : 0
SELECT NOM_MARQUE, IFNULL(v.ID_VOITURE)
FROM marque m, voiture v, model mo
WHERE v.ID_MODEL = mo.ID_MODEL
AND mo.ID_MARQUE = m.ID_MARQUE
GROUP BY NOM_MARQUE

【问题讨论】:

标签: mysql sql ifnull


【解决方案1】:

使用Left Join得到结果,试试下面的查询

SELECT b.BRAND_CAR_NAME, COUNT(*) 
FROM brand b
LEFT JOIN model mo ON b.ID_BRAND = mo.ID_BRAND
INNER JOIN vehicule v ON mo.ID_MODEL = v.ID_MODEL
GROUP BY b.BRAND_CAR_NAME;

【讨论】:

    【解决方案2】:

    您可以使用LEFT JOIN,尤其是在vehicule 表和SUM( IFNULL(SIGN(v.ID_MODEL),0) ) 之前

    我认为在model 表之前使用LEFT JOIN 更好,因为model 表缺少记录

    SELECT BRAND_CAR_NAME, SUM( IFNULL(SIGN(v.ID_MODEL),0) ) as BRAND_COUNT
      FROM brand b
      LEFT JOIN model mo ON mo.ID_BRAND = b.ID_BRAND
      LEFT JOIN vehicule v ON v.ID_MODEL = mo.ID_MODEL
     GROUP BY BRAND_CAR_NAME;
    

    Demo

    【讨论】:

    • 通过 SUM,我得到了 BRAND_COUNT 中的 ID,我在 20 个品牌的列表中创建了 6 个不同品牌的 6 辆车。这个查询几乎向我展示了很好的结果,唯一的事情是而不是计算每个品牌的车辆数量,我得到了 ID 的值(例如:菲亚特的 ID 为 20,我得到了菲亚特:20,法拉利18、福特 10、梅赛德斯 7、雪铁龙 5、标致 1、座椅 0、雷诺 0、宝马 0、大众汽车 0 等。
    • @Kovenk 看看演示,请告诉我你的数据模型有什么不同。
    • 当我用 COUNT 替换 SUM 时,我得到了错误的值。 BWM > 3 和所有其他 > 1。我不明白为什么我得到这些数字
    • @Kovenk 好吧,我们还需要一个函数:SIGN()
    • 但是有标志,如果我有 2 菲亚特,它会返回 1?
    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多