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

问题描述 投票:1回答:1

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

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

  1. 帐户表
  2. 板桌
  3. VehClass表(给出车辆类型的描述。例如;汽车,卡车等)
  4. VehicleMake表(字段是VehicleMakesID和VehicleMakeDesc

问题是,Plate表。 VehicleMakeID字段中有很多条目为NULL。因此无法加入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,则说明应显示为其他?

sql sql-server join inner-join
1个回答
2
投票

使用INNER JOIN表更改VehicleMake以获取LEFT JOIN

select ac.AccountNumber
    , p.LicPLateno
    , p.LicPlateState
    , p.LicPlateCountry
    , ISNULL(vm.VehicleMakeDesc,'Other')
    , 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 
left 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
;
© www.soinside.com 2019 - 2024. All rights reserved.