Hive中not in的正确使用

简介: Hive中not in的正确使用

背景:

前段时间在脚本开发的过程中,遇到了一个问题,就是not in查询出来的结果,代码分段查询是有结果的,但是通过not in查询出来却不存在,试了好几种办法以及百度查询了一下,最后发现了真正的原因,在这里分享给大家,给大家也避避雷。

一、问题原因

not in 没有查询出来的主要原因,还是因为Hive 不支持 where 子句中的子查询,所以not in的SQL语句是需要改写的,可以改写成not exists ,或者是left join 。

二、准备数据

1,建表

CREATE TABLE test.in_test1
(
id      varchar(10)
,name   varchar(10)
,sex    varchar(10)
,age    varchar(10)
);
CREATE TABLE test.in_test2
(
id      varchar(10)
,name   varchar(10)
,class    varchar(10)
,school    varchar(10)
);

2,插入数据

INSERT INTO test.in_test1 VALUES
('1','xiaoming','1','17'),
('2','xiaohua','0','23'),
('3','jack','1','12'),
('4','rose','0','28'),
('5','jenny','0','45'),
('6','judy','0','10'),
('7','wangwu','1','35')
;
INSERT INTO test.in_test2 VALUES
('1','xiaoming','3','花花高中'),
('2','xiaohua','5','北京大学'),
('3','jack','2','新民中学'),
('4','rose','1','清华大学')
;

3,查询数据

SELECT * FROM test.in_test1;

在这里插入图片描述

SELECT * FROM test.in_test2;

在这里插入图片描述

三、not in 改写为not exists

1,查询语句

SELECT * FROM test.in_test1 test1
WHERE 1=1
AND NOT exists (SELECT * FROM test.in_test2 test2 WHERE test1.name = test2.name)

2,查询结果

在这里插入图片描述

四、not in 改写为left join

1,查询语句

SELECT test1.* 
FROM test.in_test1 test1
LEFT JOIN test.in_test2 test2
ON test1.name = test2.name
WHERE 1=1
AND test2.name IS NULL

2,查询结果

在这里插入图片描述
分享到这里就结束了,我是喵,欢迎大家一起学习交流哦~~

相关文章
|
7月前
|
SQL 存储 分布式计算
hive解决了什么问题
hive解决了什么问题
58 0
|
9月前
|
SQL Java 数据库连接
|
11月前
|
SQL 存储 分布式计算
HIVE初识
什么是HiveHive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载,可以简称为ETL。
64 1
|
SQL 存储 分布式计算
Hive小结1
Hive小结
81 1
|
SQL 存储 分布式计算
Hive小结2
Hive小结2
104 0
|
SQL 分布式计算 大数据
Hive 到底有什么用?
MapReduce简化大数据编程难度,但对经常需大数据计算的人,如从事研究BI的数据分析师,他们通常使用SQL进行大数据分析和统计,MapReduce编程还是有门槛。且若每次统计和分析都开发相应MapReduce程序,成本确实太高。
82 0
|
SQL 存储 分布式计算
【Hive】(一)Hive 入门
【Hive】(一)Hive 入门
320 0
【Hive】(一)Hive 入门
|
SQL 存储 分布式计算
【Hive】(七)Hive 查询使用详解1
【Hive】(七)Hive 查询使用详解1
332 0
【Hive】(七)Hive 查询使用详解1
|
SQL 存储 数据采集
【Hive】(七)Hive 查询使用详解2
【Hive】(七)Hive 查询使用详解2
174 0
【Hive】(七)Hive 查询使用详解2
|
SQL 数据库 HIVE