2009-12-21 83 views
1

SELECT SUM(观看次数)其中id从syndicatedvideos( 选择VideoID的其中VideoID的在(选择syndicatedvideos syndicatedvideoid其中视频ID = 31) 工会 选择从syndicatedvideos syndicatedvideoid其中VideoID的在(选择syndicatedvideos syndicatedvideoid其中视频ID = 31 ))或(31)中的id。如何优化此查询?从视频

如何优化上面的查询?

回答

0

我认为这应该工作。

select sum(viewcount) from video 
where id in(select syndicatedvideoid from syndicatedvideos where videoid=31) or or id in (31) 

请检查确认。谢谢。

+0

你已经剪出了一大堆videoids。 – Li0liQ 2009-12-21 07:55:27

0
SELECT sum(video.viewcount) FROM video 
    LEFT JOIN syndicatedvideos sv1 ON video.id=sv1.videoid 
    LEFT JOIN syndicatedvideos sv2 ON video.id=sv1.syndicatedvideoid 
WHERE 
    sv1.videoid=31 OR 
    sv2.videoid=31 OR 
    video.id=31; 
0
select sum(viewcount) 
from video 
where id in(

    select id from(
     select videoid as id 
     from syndicatedvideos 

     union 

     select syndicatedvideoid as id 
     from syndicatedvideos) 

    where id in(
     select syndicatedvideoid 
     from syndicatedvideos 
     where videoid=31) 

) or id in (31) 
0
select sum(viewcount) 
from video v 
where exists (
    select 1 
    from syndicatedvideos sv 
    where (
     v.id = sv.videoid 
     or v.id = sv.syndicatevideoid) 
    and exists (
     select 1 
     from syndicatedvideos sv2 
     where sv.videoid = sv2.syndicatevideoid 
     and sv2.videoid=31) 
) 
or id = 31. 

我改变了:

  • 最后替换()与=
  • 取代你的主要在()子查询与存在其上 VideoID的和同时匹配从而避免与第二个子分句
  • 结合,很好地格式化以帮助在下面tanding :-)