首页新闻找找看学习计划

SQL语句not in查询改为左外连接查询

0
悬赏园豆:10 [已解决问题] 解决于 2017-02-17 16:41

select * from CYX_A s where   s.A_ID not in (select A_ID from CYX_A t where t.version_dt='20170207')  and s.version_dt='20170208'

 

帮忙把这个语句改为

select a.* from A a left outer join B b on a.uid=b.uid and a.goods=b.goods where b.uid is null and b.goods is null;  

 

这种格式的

星星·的主页 星星· | 初学一级 | 园豆:9
提问于:2017-02-17 10:01
< >
分享
最佳答案
1

select * from CYX_A a
    left join (select A_ID from CYX_A t where t.version_dt='20170207')b on a.A_ID=b.A_ID
where a.version_dt='20170208' and b.A_ID is null



收获园豆:10
清海扬波 | 小虾三级 |园豆:813 | 2017-02-17 10:51

后面多了一列null

星星· | 园豆:9 (初学一级) | 2017-02-17 10:57

@Yuxiang_Chen: 嗯哼,这样的写法不对,not in  也就是 t.version_dt 不在 '20170207' 范围内的

select A_ID from CYX_A t where t.version_dt='20170207'这样left join 显然是不对的

代码飞了 | 园豆:470 (菜鸟二级) | 2017-02-17 11:07

@代码飞了: not in是排除A_ID的

星星· | 园豆:9 (初学一级) | 2017-02-17 11:11
其他回答(2)
0

select s.*
  from CYX_A s
  left outer join CYX_A t on s.A_ID = t.A_ID
 where s.version_dt = '20170208'
   and t.version_dt != '20170207' ;

代码飞了 | 园豆:470 (菜鸟二级) | 2017-02-17 10:34

你这是谁教的?

支持(0) 反对(0) 星星· | 园豆:9 (初学一级) | 2017-02-17 10:56

@Yuxiang_Chen: 嗯哼,咋啦

支持(0) 反对(0) 代码飞了 | 园豆:470 (菜鸟二级) | 2017-02-17 11:02

@代码飞了: 表里面有很多分区,需要查询08分区里面与07不重复的数据

支持(0) 反对(0) 星星· | 园豆:9 (初学一级) | 2017-02-17 11:06

@Yuxiang_Chen: 我只是根据你问题来的,将SQL转化而已,其他补充的没说,怪我咯

支持(0) 反对(0) 代码飞了 | 园豆:470 (菜鸟二级) | 2017-02-17 11:10

@代码飞了: 怪我没说清楚   哈哈哈

支持(0) 反对(0) 星星· | 园豆:9 (初学一级) | 2017-02-17 11:11
0

你这写的也太绕了,数据表CYX_A 中的version_dt列如果等于20170207那么就一定不等于20170208。这两个条件是互斥的。所以,以上sql语句可以写成select * from CYX_A s where version_dt != '20170207'。这样就简单明了多了

龙葛格 | 园豆:712 (小虾三级) | 2017-02-17 10:52

hive分区表

支持(0) 反对(0) 星星· | 园豆:9 (初学一级) | 2017-02-17 10:58

表里面有很多分区,需要查询08分区里面与07不重复的数据

支持(0) 反对(0) 星星· | 园豆:9 (初学一级) | 2017-02-17 11:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册