select *from smtopm where exists (SELECT smtopm.item_key FROM smtopm inner join iir on trim(iir.itm_key)=trim(smtopm.item_key));
与
SELECT smtopm.item_key FROM smtopm inner join iir on trim(iir.itm_key)=trim(smtopm.item_key);
为什么不同,难道这里的EXISTS有问题吗?
FUCK oracle
与
SELECT smtopm.item_key FROM smtopm inner join iir on trim(iir.itm_key)=trim(smtopm.item_key);
为什么不同,难道这里的EXISTS有问题吗?
FUCK oracle
1)select *from smtopm ,因为exists的条件总是返还true.
2)SELECT smtopm.item_key FROM smtopm inner join iir on trim(iir.itm_key)=trim(smtopm.item_key); 这个和最普通的是一样的,inner不还是不inner是没有区别的。
所以在有记录的情况下,通常后者返回的和前者的是不一样的。
这个是因为你没有了解exists,并且你的exists条件可能不是你需要的。
oracle有问题,但是不至于在这个方面出现。
你执行以下你的subquery就知道返还的rows》=1,因为总是1,总是true,所以等同于没有用
第二句你也应该去掉多余数据。试试看我这个,我这里假设了item_key是unique的:
1.select smtopm.item_key from smtopm
where exists (SELECT * FROM iir where trim(iir.itm_key)=trim(smtopm.item_key));2.SELECT smtopm.item_key FROM smtopm inner join iir on trim(iir.itm_key)=trim(smtopm.item_key) group by smtopm.item_key;说实话oracle比mssql好用多了,sql2005才开始支持一些analytic function,而且一直觉得sqlserver deadlock问题严重,设计数据库很麻烦。别骂oracle拉!