项目的数据库中有2张表,这两张表有部分差别(几个字段不一样)。
我举例来说吧,假设有个本科生表,一个研究生表,属性大部分相同的,但是一两个字段有不同。
我不清楚怎么设计的数据库,这是一个现成的项目需要维护。
我现在只能在这个基础上改。现在要增加一个人员查询,查询结果是从这两个表来进行的。
所以得综合两张表才能得到查询结果。(当然是两个表都有的属性)。由于结果很多,所以还需要做分页,分页的页面大小固定,页数根据2张表查询到的结果来除以页面大小决定。到下一页的时候,又要综合两张表来进行。这种情况下如何来查询?我曾考虑过用一个临时表来缓冲数据,把两张表的数据汇总到一起。
但这样这个临时表可能就会很大。请大家给一个可行的思路,谢谢了。我使用的是SQL Express2005
我举例来说吧,假设有个本科生表,一个研究生表,属性大部分相同的,但是一两个字段有不同。
我不清楚怎么设计的数据库,这是一个现成的项目需要维护。
我现在只能在这个基础上改。现在要增加一个人员查询,查询结果是从这两个表来进行的。
所以得综合两张表才能得到查询结果。(当然是两个表都有的属性)。由于结果很多,所以还需要做分页,分页的页面大小固定,页数根据2张表查询到的结果来除以页面大小决定。到下一页的时候,又要综合两张表来进行。这种情况下如何来查询?我曾考虑过用一个临时表来缓冲数据,把两张表的数据汇总到一起。
但这样这个临时表可能就会很大。请大家给一个可行的思路,谢谢了。我使用的是SQL Express2005
union all
select * from tb2
例如表一
col1 col2 col3表二
col1 col2 col4
select col1,col2,col3,null as col4 from 表一
union all
select col1,col2,null,col4 from 表二
as
select * from tb1
union all
select * from tb2
declare @PageSize int, @PageNo int
select @PageSize = 100, @PageNo = 3 --每100条记录为一页, 查询第3页的数据select * from
(
select rowno = ROW_NUMBER() over(order by getdate()), * from
(
select same_field1, same_field2, same_field3, same_field4 from tb1
union all --去除重复则用union
select same_field1, same_field2, same_field3, same_field4 from tb2
) a
) b
where rowno between (@PageSize*(@PageNo-1)+1) and @PageSize*@PageNo