SAS中文论坛

标题: SQL中not in的left join优化 [打印本页]

作者: shiyiming    时间: 2011-6-21 20:24
标题: 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>




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2