2012-10-25 105 views
0

我有2个SQL表:"episode""topic",每个主题和剧集都有一个视频(一集包含几个主题,但对我的问题并不重要)。他们有自己的领域,但他们共有"title", "date", "video_url""count"(计数是观看视频的次数)。从其他选择查询中的2个表中做出2个SQL select查询

我想根据计数字段只有一个查询进行前5名选择。

所以我需要合并查询:

select title, date, video_url, count from episode order by count desc 

和“从主题”使用相同的查询。

回答

2
select top 5 * 
from 
(
     select title, date, video_url, count from episode 
     union all 
     select title, date, video_url, count from topic 
) as A 
order by count desc 

您可以添加类型名称以查明它是情节还是主题。您还可以添加top 5成这样子查询服务器将知道他并不需要得到所有的记录

select top 5 * 
from 
(
     select top 5 title, date, video_url, count, 'episode' as type_name from episode order by count desc 
     union all 
     select top 5 title, date, video_url, count, 'topic' as type_name from topic order by count desc 
) as A 
order by count desc 
+0

好回答的第一个,因为它也余地淘汰的相同视频。如果你把一个选择独特的顶端5 *等etc等 –

+0

我已经在子查询中添加了'top 5',以确保优化器在合并之前不会从每个表中获取超过5条记录。我不知道是否需要消除视频,所以我没有添加'distinct' –

+0

是的,这是更好的。但是我正在谈论1个视频的可能性,以及在一集和一个主题中都存在的MOST观点。然后,它仍然会从两个表(作为行号1)进入合并,并且是结果选择的前两行。 –