日期:2014-05-20  浏览次数:20824 次

oracle sql查询有什么讲究吗 帮我看看 谢谢
select distinct c.constel_sid,c.* from 
(select * 
  from biz_constellation a,
  ( select constel_sid  
  from biz_daily_constel 
  where curr_date=to_date('2011-11-30','yyyy-mm-dd')
  ) b 
where a.constel_sid 
in( 
  select constel_sid from biz_daily_constel where curr_date=to_date('2011-11-30','yyyy-mm-dd')
  ) 
order by a.DATE_FROM
 ) c 
where '1'='1';
这个语句有问题吗 谢谢 大牛们帮我看看

------解决方案--------------------
select distinct c.constel_sid,c.* from
(select *
from biz_constellation a where a.constel_sid
in(
select constel_sid from biz_daily_constel where curr_date=to_date('2011-11-30','yyyy-mm-dd')
)
order by a.DATE_FROM
 ) c
where '1'='1';

------解决方案--------------------
select返回的结果集可以看作是一个临时表
LZ试试在oralce环境下运行一下就好了
大概看一眼,感觉 order by a.DATE_FROM 和 where '1'='1' 可以不要
where a.constel_sid
in(
select constel_sid from biz_daily_constel where curr_date=to_date('2011-11-30','yyyy-mm-dd')
)
改成 where a.constel_sid = b.constel_sid 就好了
否则a和b没有条件关联约束,会造成交叉查询,即每一条a对应所有的b,会产生庞大的结果集,得到的结果应该不是LZ想要的