zoukankan      html  css  js  c++  java
  • Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。

    今天遇到的一个大坑,话不多少,看sql和下边的查询结果:

     1 --问题:恰好把buildingid is null的记录给过滤掉
     2 create table tommyduan_gridcell_group_all_test(gridid nvarchar(32),buildingid nvarchar(32),floor nvarchar(32));
     3 insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g1',null,1);
     4 insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g2','b1',1);
     5 insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g2','b2',1);
     6 insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g3','b2',1);
     7 insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g3','b2',2);
     8 insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g3','b2',4);
     9 
    10 
    11 create table tommyduan_fingerlib(gridid nvarchar(32),buildingid nvarchar(32),floor nvarchar(32));
    12 insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g1',null,1);
    13 insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g2','b1',1);
    14 insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g2','b2',1);
    15 insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g3','b2',1);
    16 insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g3','b2',2);
    17 insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g3','b2',4);
    18 
    19 
    20 select * from tommyduan_gridcell_group_all_test t10 
    21 inner join tommyduan_fingerlib t11 
    22 on t10.gridid=t11.gridid and t10.buildingid=t11.buildingid and t10.floor=t11.floor

    查询结果:

    解决方案:

     1 select * from 
     2 (
     3 select gridid,buildingid,floor,gridid+(case when buildingid is null then 'd_null' else buildingid end)+floor as tkey 
     4 from tommyduan_gridcell_group_all_test
     5 ) t10 
     6 inner join 
     7 (
     8 select gridid,buildingid,floor,gridid+(case when buildingid is null then 'd_null' else buildingid end)+floor as tkey 
     9 from tommyduan_fingerlib
    10 )  t11 
    11 on t10.tkey=t11.tkey

    查询结果:

    left outer join时的查询结果是:

    1 select * from tommyduan_gridcell_group_all_test t10 
    2 left outer join tommyduan_fingerlib t11 
    3 on t10.gridid=t11.gridid and t10.buildingid=t11.buildingid and t10.floor=t11.floor

  • 相关阅读:
    create mysql database
    mysql install
    mac os vim 乱码
    Three.js 基础入门
    Echarts修改提示框及自定义提示框内容
    Echarts3实例 南丁格尔饼图
    南丁格尔玫瑰图3
    Echarts实战案例代码:饼图pie之南丁格尔玫瑰图rose实现代码
    记录下vue 中引用echarts 出现 "TypeError: Cannot read property 'getAttribute' of undefined"问题
    echarts 中国地图,根据省份数值高低改变省份颜色深浅
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/8286162.html
Copyright © 2011-2022 走看看