当前位置: 代码迷 >> Sql Server >> 一个简略的多表的联合查询
  详细解决方案

一个简略的多表的联合查询

热度:20   发布时间:2016-04-24 09:42:35.0
一个简单的多表的联合查询
很典型的基本问题:A,B两个表,

A是新闻类别
id   class_Name
1    生活
2    娱乐
3    健康
4    综合

B是新闻信息表
id   class_ID   Topic
1    1                 标题xxxxxxxxxxxx
2    1                 标题xxxxxxxxxxxx
3    2                 标题xxxxxxxxxxxx
4    2                 标题xxxxxxxxxxxx
5    3                 标题xxxxxxxxxxxx
1    3                 标题xxxxxxxxxxxx
2    4                 标题xxxxxxxxxxxx
3    4                 标题xxxxxxxxxxxx
4    5                 标题xxxxxxxxxxxx
5    5                 标题xxxxxxxxxxxx
1    1                 标题xxxxxxxxxxxx
2    1                 标题xxxxxxxxxxxx
3    3                 标题xxxxxxxxxxxx
4    3                 标题xxxxxxxxxxxx
5    3                 标题xxxxxxxxxxxx


现在要实现一句语句

1.依据表A,调取表B的新闻,每一个A调取两个B记录,根据  表A的class_Name顺序 表B的ID倒叙,

2.依据表A,调取表B的新闻,每一个A只调取一个B记录,根据ID倒叙,怎样速度最快!
------解决思路----------------------
1.依据表A,调取表B的新闻,每一个A调取两个B记录,根据  表A的class_Name顺序 表B的ID倒叙,
SELECT
A.*,T.id,T.Topic
FROM
A OUTER APPLY(SELECT TOP 2 * FROM B WHERE A.id=B.class_ID ORDER BY B.id DESC)T
ORDER BY A.id,T.id DESC
2.依据表A,调取表B的新闻,每一个A只调取一个B记录,根据ID倒叙,怎样速度最快!
TOP 2 换成TOP 1
你要速度快的话,得结合你的数据本身了
SELECT * FROM(
SELECT ROW_NUMBER()OVER(PARTITION BY A.id ORDER BY B.id DESC)RN,A.*,B.id bid,B.Topic
FROM A LEFT JOIN B ON A.id=B.class_ID
)T
WHERE RN=1
你试下哪种速度快用哪种吧
什么?SQL2000?那你只能更慢了
  相关解决方案