有1到20个数据表,SQL如何获取每个表最新的第一行数据,组成一个结果集

有1到20个数据表,如何获取每个表最新的第一行数据,组成一个结果集:例如可以这样:selecttop1*fromtable1unionallselecttop1*from... 有1到20个数据表,如何获取每个表最新的第一行数据,组成一个结果集:
例如可以这样:

select top 1 * from table1
union all
select top 1 * from table2
union all
............
select top1 * from table20

但是以上SQL语句会随着表个数的增加而变得更长,有没有其他更优化的办法呢?
展开
 我来答
17号观察室
2013-09-09 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1371万
展开全部
楼主 根据你的语句 可以判断 你的数据库是sql server的
不要用系统表 遍历的方法 遍历数据是最影响性能的
首先你这个20个表是固定的 所以你的语句没有问题 20个表你必须都有读一次 这个省不了
所以你的语句就是最简单的了 没有优化的余地
可以在表的结构上下手 20个表应该都有主键id 自动增长
主键本身就含有聚集索引 所以无论你的数据有多少 查询一条数据都是很快的
希望解决了楼主的疑问
中工小熊
2013-09-09 · 超过26用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:66万
展开全部
首先你确定这20个表的结构是一样的,这样可以写一个存储过程大致如下
我就以oracle 为例子吧
--创建一个类似table1的空表tabunion;
create table tabunion as select * from table1 where 1=2;
--存储过程如下
create or replace procedure pro_tabunion
as
begin
truncate table tabunion;
insert into tabunion select top 1 * from table1 order by xxxxtime desc;
....
insert into tabunion select top 1 * from table20 order by xxxxtime desc;
end;
---查询结果
select * from tabunion;

另外 sqlserver的话 可以直接在begin 和end 中间写入 你上面贴出的
union all 内容
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
toshiojkx
2013-09-09 · TA获得超过492个赞
知道小有建树答主
回答量:260
采纳率:100%
帮助的人:105万
展开全部

写一个存储过程遍历表名

select name from sysobjects 
where xtype= 'u'

然后在存储过程里面遍历查询,这样就可以不管表数量如何增加都不用增加代码

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式