SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 721|回复: 0
打印 上一主题 下一主题

SQL中not in的left join优化

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-6-21 20:24:06 | 只看该作者

SQL中not in的left join优化

From supersasmacro's blog on Sina

数据量大的时候,用not in速度太慢,今天学到一招,就是用left
join进行优化。然后在网上查了一下,原来这个方法很普遍了。不过自己记录一下吧,以后会用到的。方法如下:最终C和D两个数据集是一致的。
<div><br /></DIV>
<div>
<div>data a;</DIV>
<div>input a1 a2;</DIV>
<div>cards;</DIV>
<div>1 2</DIV>
<div>1 3</DIV>
<div>2 2</DIV>
<div>2 1</DIV>
<div>;</DIV>
<div>run;</DIV>
<div><br /></DIV>
<div>data b;</DIV>
<div>input a1 b1;</DIV>
<div>cards;</DIV>
<div>1 2</DIV>
<div>3 4</DIV>
<div>;</DIV>
<div>run;</DIV>
<div><br /></DIV>
<div>proc sql;</DIV>
<div>create table c as</DIV>
<div>select a.*</DIV>
<div>from a a</DIV>
<div>left join b b</DIV>
<div>on a.a1=b.a1</DIV>
<div>where b.a1=.;</DIV>
<div>quit;</DIV>
<div><br /></DIV>
<div>proc sql;</DIV>
<div>create table d as</DIV>
<div>select a.*</DIV>
<div>from a a</DIV>
<div>where a.a1 not in</DIV>
<div>(select a1 from b);</DIV>
<div>quit;</DIV>
<div><br /></DIV>
<div>proc print data=c;</DIV>
<div>run;</DIV>
<div><br /></DIV>
<div>proc print data=d;</DIV>
<div>run;</DIV>
</DIV>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-10 05:45 , Processed in 0.071102 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表