Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。
今天遇到的一个大坑,话不多少,看sql和下边的查询结果:
--问题:恰好把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

Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。的更多相关文章
- 在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法
在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法 ==========方法1: --------1. 选相应 ...
- 保留键的情况下取字典中最大的值(max\zip函数的联合使用)
在我们平常想要获取字典中value最大或者最小的值的时候,常常使用如下函数: testDict = {"age1":18,"age2":20,"age ...
- 接口中的方法都自动的被设置为public,接口中的域被自动设置为public static final
接口中的方法都自动的被设置为public,接口中的域被自动设置为public static final
- 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色 实现思路: 在页面的 <body&g ...
- 如何在不使用系统函数的情况下实现PHP中数组系统函数的功能
PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= ar ...
- 在注册表中无Python3.5安装路径的情况下安装pywin32-
当安装pywin32出现Python Version 3.5 required which was not found in the registry的时候表面注册表中没有Python3.5的安装路径 ...
- Spring-boot中使用@ConditionalOnExpression注解,在特定情况下初始化bean
想要实现的功能: 我想在配置文件中设置一个开关,enabled,在开关为true的时候才实例化bean,进行相关业务逻辑的操作. 具体实现: 1:要实例化的bean 2. 配置类 代码: 想要实例化的 ...
- eclipse 项目中的java文件没有在WEB-INF目录下的classes中 生成相对应的编译后的类
1.首先确定project->Build Automatically是否勾选上: 2.执行完第一步之后测试一下看是否能编译,如果还是不能,则进行手动编译: 3,进入clean对话框,选择Cle ...
- 关于datagridview中checkbox列在选中行的情况下无法操作值
这几天做项目的时候碰到了个小问题,在datagridview中实现对checkbox列的全选和反选功能.代码如下 //全选 if (dataGrid ...
随机推荐
- ConcurrentHashMap源码解析(JDK1.8)
package java.util.concurrent; import java.io.ObjectStreamField; import java.io.Serializable; import ...
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListene解决办法
照着以前写的项目搭一个框架,项目用到的是ssm,spring+spring mvc+mybatis,由Eclipse转战IDEA上,项目的文件夹有一些改变,在之前的小项目中喜欢把lib文件夹放在项目根 ...
- const 相关知识 const和指针、const和引用
以前老是对const概念不清不楚,今天算是好好做个笔记总结一下.以下内容包括1)常量指针(指针本身是常量),2)指针常量(指针指向的是常量对象),3)常量引用,4)const成员函数. 常量指针,指针 ...
- Python OJ 从入门到入门基础练习 10 题
1.天天向上的力量: 一年365天,以第1天的能力值为基数,记为1.0.当好好学习时,能力值相比前一天提高N‰:当没有学习时,由于遗忘等原因能力值相比前一天下降N‰.每天努力或放任,一年下来的能力值相 ...
- c++ --> 变量、常量与运算符
变量.常量与运算符 一.什么是变量? 在计算机的内存中, 内存被划分为一个一个的内存单元, 每个内存单元有自己的编号, 而变量就是对某一段连续内存单元使用一些更容易记忆.更容易区分的字符组合 ...
- svn 要求commit提交必须加注释(日志) hook
#vim /data/svn/mysvn/hook/pre-commit #!/bin/bashREPOS="$1"TXN="$2" #RES="OK ...
- Linux下ping,telnet,ssh命令的比较
ping工作在OSI模型的第三层,网络层. 主要用于测试到达目的主机的网络是否连接,不能检测某个端口是否开放. ping使用ICMP协议,不使用某个特定端口. 也可以 ping 域名 ,这样可以直接看 ...
- Beta阶段敏捷冲刺每日报告——Day0
下一阶段需要改进完善的功能: 搜索框在Firefox和IE中显示不正常问题 下一阶段新增的功能: ToDoList功能:针对博主的功能,在博主登录之后可以添加和修改待办事项,每个事项包括标题.内容.日 ...
- 那些在django开发中遇到的坑
1. 关于csrf错误 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或 ...
- Storm概念讲解和工作原理介绍
Strom的结构 Storm与传统关系型数据库 传统关系型数据库是先存后计算,而storm则是先算后存,甚至不存 传统关系型数据库很难部署实时计算,只能部署定时任务统计分析窗口数据 ...