Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。
2018-01-15 03:41
721 查看
今天遇到的一个大坑,话不多少,看sql和下边的查询结果:
查询结果:
查询结果:
left outer join时的查询结果是:
--问题:恰好把buildingid is null的记录给过滤掉 create table tommyduan_gridcell_group_all_test(gridid nvarchar(32),buildingid nvarchar(32),floor nvarchar(32)); insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g1',null,1); insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g2','b1',1); insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g2','b2',1); insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g3','b2',1); insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g3','b2',2); insert into tommyduan_gridcell_group_all_test(gridid,buildingid,floor)values('g3','b2',4); create table tommyduan_fingerlib(gridid nvarchar(32),buildingid nvarchar(32),floor nvarchar(32)); insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g1',null,1); insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g2','b1',1); insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g2','b2',1); insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g3','b2',1); insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g3','b2',2); insert into tommyduan_fingerlib(gridid,buildingid,floor)values('g3','b2',4); select * from tommyduan_gridcell_group_all_test t10 inner join tommyduan_fingerlib t11 on t10.gridid=t11.gridid and t10.buildingid=t11.buildingid and t10.floor=t11.floor
查询结果:
解决方案:
select * from ( select gridid,buildingid,floor,gridid+(case when buildingid is null then 'd_null' else buildingid end)+floor as tkey from tommyduan_gridcell_group_all_test ) t10 inner join ( select gridid,buildingid,floor,gridid+(case when buildingid is null then 'd_null' else buildingid end)+floor as tkey from tommyduan_fingerlib ) t11 on t10.tkey=t11.tkey
查询结果:
left outer join时的查询结果是:
select * from tommyduan_gridcell_group_all_test t10 left outer join tommyduan_fingerlib t11 on t10.gridid=t11.gridid and t10.buildingid=t11.buildingid and t10.floor=t11.floor
相关文章推荐
- SQL SERVER inner join on 和where条件的作用范围
- 使用INNER JOIN ON 多表关联查询,获取指定用户下指定权限的资源SQL:
- Hive sql语法:inner join on, left join on, right join on详细使用方法
- 第90课:Hive中电影评价系统案例数据建模、数据过滤、Join多表关联、Map端Join、原理剖析等
- sqlserver join之后如何过滤右表中的某一些数据
- SQLServer inner join 不先执行where条件的优化
- sparkSQL里 sql语句,dataframe,Thrift Server JDBC都可以实现对数据的查询,过滤等操作, 哪这3种情况分别是什么情况下使用
- sql语法:inner join on, left join on, right join on详细使用方法
- SQL Server 2005移动数据文件
- sql语法:inner join on, left join on, right join on具体用法
- 尽可能避免在where条件或者join时的on条件中使用case函数(T-SQL)
- sql语法:inner join on, left join on, right join on详细使用方法
- 阿里云数据SQL Server SE&EE高可用版本发布
- SQL Server & Oracle 导出导入数据及表的方法
- SQL语法: inner join on, left join on,right join on详细使用方法
- 记一次程序优化---sql数据大,表关联过多,但结果仅需要前几条数据
- 数据库之SQL SERVER中使用函数去掉结果数据中的空格
- sql语法:inner join on, left join on, right join on详细使用方法
- MS SQL SERVER 2000 误删除数据后…
- sql语法:inner join on, left join on, right join on详细使用方法