如下表:
create table stu ( id int, name VARCHAR(32), age int ) create table number ( id int, name VARCHAR(32), age int ) insert into stu(id,name,age) values(1,'aa',19); insert into stu(id,name,age) values(2,'bb',19); insert into stu(id,name,age) values(3,'cc',19); insert into number(id,name,age) values(1,'aa',19); insert into number(id,name,age) values(2,'bb',19); insert into number(id,name,age) values(3,'cc',19); insert into number(id,name,age) values(4,'dd',12);
如题:想从二张表关联起来查询出 number 表中没有在 stu 中出现过的,也就是(4,'dd',12)这条数据
开始想到用的是 left OUTER JOIN 语句:
select a.id,a.name,a.age from number as a left OUTER JOIN stu as b on (a.name=b.name and a.age=b.age)
出来的数据不是我想要的:
1 aa 19
2 bb 19
3 cc 19
4 dd 12
于是利用下面几种办法得出结果:
1.这是 mysql 惯用的手法,可是因为做这个测试是在 HIVE 中使用,所以这种办法被 get out.
select * from number as b where not exists (select name,age from stu a where a.age = b.age and a.name = b.name)
2.此方法在 HIVE 中也无法执行。
3.最终得出一种方法,记得在上家公司曾经遇见过此问题,还是问前同事得出
select a.id,a.name,a.age from number as a left OUTER JOIN stu as b on (a.name=b.name and a.age=b.age) where b.name is null
结果:
4 dd 12
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于