oracle sql中的“哪里不存在”vs“左外连接”

时间:2012-09-21 07:51:08

标签: sql oracle

我有一个简单的SQL查询:

SELECT  
       columnA, columnB, columnC...  
 FROM  
       (SELECT    
             columnA, columnB, columnC...  
        FROM   
              SomeTable) Table1  
  WHERE NOT EXISTS  
        (SELECT   
               columnA  
          FROM  
               SomeOtherTable st  
          WHERE  
               st.columnB = Table1.columnB)

有人可以给我一个建议如何重写此查询以获得更好的性能吗?我的意思是在表1中包含WHERE NOT EXISTS子句。

2 个答案:

答案 0 :(得分:5)

您可以使用:

select Table1.*
from (select * from SomeTable) Table1
left outer join SomeOtherTable sot
    on Table1.columnB = sot.columnB
where sot.columnB is null;

对于性能,在两个表上都有columnB上的索引很重要。

答案 1 :(得分:0)

这个怎么样:

SELECT columnA, columnB, columnC... 
FROM SomeTable
WHERE (SELECT COUNT(*) FROM  SomeOtherTable st  WHERE  st.columnB = SomeTable.columnB)=0;