如何加入具有Null值的SQL Server表?

时间:2017-08-03 18:33:33

标签: sql sql-server join inner-join

我编写了代码来提取特定帐号注册的牌照数量。它也提供了那辆车的制作。

我正在使用4个表来获取此信息:

  1. 帐户表
  2. 盘子桌
  3. VehClass表(用于描述车辆的类型。例如;汽车,卡车等)
  4. VehicleMake表(字段为VehicleMakesID和VehicleMakeDesc
  5.   

    问题是, Plate 表。很多条目都有NULL    VehicleMakeID 字段。因此无法加入 VehicleMake 表来获取   车辆描述。

    我的代码如下:

    select ac.AccountNumber
        , p.LicPLateno
        , p.LicPlateState
        , p.LicPlateCountry
        , vm.VehicleMakeDesc
        , p.VehicleModel
        , p.VehicleYear
        , v.VehShortDesc
        --, ISNULL(p.VehicleMakeId,'-1') VechicleMakeId  --(-1 means Other)
        , p.VehicleMakeId
    
    from account ac 
    inner join Plate p on ac.AccountId=p.AccountId 
    inner join VehClass v on p.VehClassId=v.VehClassID 
    inner join VehicleMake vm on p.VehicleMakeId=vm.VehicleMakeId
    
    where ac.AccountNumber= '12345678'
      and p.PlateStatusId=1  --(For Active Plates only)
      and p.EndDate is null  --(Plates are not expired)
    
    order by p.LicPlateNo
    

    我得到的结果是:

    ABS123  BC  CA  Other   - NULL  Cars    -1  
    DEF345  BC  CA  Other   - NULL  Cars    -1  
    GHI456  BC  CA  Other   - NULL  Cars    -1  
    HIJ567  BC  CA  Other   - NULL  Cars    -1
    

    结果显示仅有4个平板,但实际上有31个平板。那些其他牌照没有显示,因为其他牌照在VehicleMakeID字段中为NULL。因此,他们没有加入VehicleMake表。

    如何获取所有31个牌照的列表,如果VehicleMakeID为NULL,则说明应显示为其他?

1 个答案:

答案 0 :(得分:2)

使用INNER JOIN的{​​{1}}表更改VehicleMake

LEFT JOIN