首页 新闻 会员 周边

Oracle in 操作逆天了

0
[已关闭问题] 关闭于 2013-06-06 17:22

    select count(*)
   from asset_item t

记录数13000多   

select count(*)
   from asset_item t
   where t.ASSETID in (select t2.ASSETID from asset_data t2 )

记录数一样,13000多   
  

select min(t1.ASSETID) ASSETID
   from asset_data t1
   group by t1.LOCATION,
   t1.PLANT, t1.DESIG, t1.ATTRIBUTE

记录数8000多,

神奇的事情发生了
   select count(*)
   from asset_item t
   where t.ASSETID in  
   (select min(t1.ASSETID) ASSETID
   from asset_data t1
   group by t1.LOCATION,
   t1.PLANT, t1.DESIG, t1.ATTRIBUTE)

记录数9万多。

 

还有 Oracle 不支持select * into 操作。

lorgine的主页 lorgine | 菜鸟二级 | 园豆:245
提问于:2012-12-11 16:17
< >
分享
所有回答(1)
0

很正常啊。你的条件是在分组以后取最小id集合。而count的条件是id存在于最小id集合中。那么你有没有确定你的最小id有几条记录呢,比如你8000多最小id,那么每一个最小id可能同时存在10多条,这样不就会产生9w条结果吗?

茂茂 | 园豆:2892 (老鸟四级) | 2012-12-11 16:29

  select count(*)
   from asset_item t
   where t.ASSETID in  
   (select min(t1.ASSETID) ASSETID
   from asset_data t1
   group by t1.LOCATION,
   t1.PLANT, t1.DESIG, t1.ATTRIBUTE)

 

这个在sql server 中执行 应该是正常的。

而且这个在oracle中 逻辑上说不过去。我仅仅是加了个
过滤条件加了反而条数说不过去。这个解释不通啊

支持(0) 反对(0) lorgine | 园豆:245 (菜鸟二级) | 2012-12-11 16:57

@lorgine: 你没好好理解我说的意思

支持(0) 反对(0) 茂茂 | 园豆:2892 (老鸟四级) | 2012-12-11 17:18

@茂茂: 这句话sql中执行不通过应该

select min(t1.ASSETID) ASSETID
   from asset_data t1
   group by t1.LOCATION,
   t1.PLANT, t1.DESIG, t1.ATTRIBUTE

少了个as

select min(t1.ASSETID)  as ASSETID
   from asset_data t1
   group by t1.LOCATION,
   t1.PLANT, t1.DESIG, t1.ATTRIBUTE

支持(0) 反对(0) 茂茂 | 园豆:2892 (老鸟四级) | 2012-12-11 17:25

@茂茂: 执行时通过了,只是数量不对。

支持(0) 反对(0) lorgine | 园豆:245 (菜鸟二级) | 2012-12-11 18:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册