那位大侠能帮我优化一下这条语句,自从结构上优化就可以了,改成最简单的语句就可以了,就是去掉嵌套,去掉in之类的
select rid,rname,sname,cname
from ringinfo,singerinfo,clipinfo
where singerinfo.sid in (select sid from singerinfo where ssex=1)
and singerinfo.sid=ringinfo.sid
and clipinfo.cid in (select cid from clipinfo where ctime=2010)
and clipinfo.cid=ringinfo.cid
and rid in (
select rid
from numberinfo
where num>70 and num<90
and rid in (
select rid
from orderinfo
where to_char(odate,'yyyymmdd') between '20100101' and '20100131'
))
order by rid ;

解决方案 »

  1.   

    SELECT rid, rname, sname, cname
      FROM ringinfo, singerinfo, clipinfo, numberinfo, orderinfo
     WHERE singerinfo.ssex = 1
       AND singerinfo.sid = ringinfo.sid
       AND clipinfo.ctime = 2010
       AND clipinfo.cid = ringinfo.cid
       AND singerinfo.rid = numberinfo.rid
       AND numberinfo.num > 70
       AND numberinfo.num < 90
       AND numberinfo.rid = orderinfo.rid
       AND orderinfo.odate BETWEEN DATE'2010-01-01' AND DATE'2010-01-31'
     ORDER BY rid;