Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何联接具有空值的SQL Server表?_Sql_Sql Server_Join_Inner Join - Fatal编程技术网

如何联接具有空值的SQL Server表?

如何联接具有空值的SQL Server表?,sql,sql-server,join,inner-join,Sql,Sql Server,Join,Inner Join,我写了一段代码来计算一个特定账号上注册了多少个车牌。它还提供了该车辆的品牌 我使用4个表来获取此信息: 账表 板桌 VehClass表(用于说明车辆类型,如轿车、卡车等) VehicleMake表(字段为VehicleMakesID和VehicleMakeDesc 问题是,图版表格。许多条目在 VehicleMakeID字段。因此无法加入VehicleMake表以获取 车辆说明 我的代码如下: select ac.AccountNumber , p.LicPLateno , p.

我写了一段代码来计算一个特定账号上注册了多少个车牌。它还提供了该车辆的品牌

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

  • 账表
  • 板桌
  • VehClass表(用于说明车辆类型,如轿车、卡车等)
  • VehicleMake表(字段为VehicleMakesID和VehicleMakeDesc
  • 问题是,图版表格。许多条目在 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字段中为空。因此,它们没有与VehicleMake表连接


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

    使用
    VehicleMake
    表更改
    内部连接
    ,以获得
    左侧连接

    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
    ;
    

    很接近了。请在select语句中保持isnull,并使用外部联接获取车牌。左联接车辆Make