这是今天的大喜事!
我企盼已经久的一个问题终于得到解决了!
以前需要对一个企业网站进行全站搜索的时候,如果是sql server,那就用临时表,把产品表和新闻填充到临时表然后再从临时表中搜索,如果是access,那就没有办法了,因为很多资料都说了access不支持临时表。
昨天下午,在用asp.net做一个access的项目,其中Repeater不支持分页,access也不支持存储过程。DataSet也不支持分页,最后只好在sql语句上寻找办法了。经过反复的研究,最后找到一个办法并且成功通过了。在这个过程中,用到一个UNION,在这个应用中,UNION是把同一个表的两个查询结果合并在一起的。我在反复的思考过程中想到了,能不能把两个不同的表合并到一起呢?
想过了之后,就决定动手做一下,找到以前某个网站的数据里,里面有[News]和[Products]两个表。然后分别从两个各自取出几个字段尝试合并,第一次出现个问题,就是两个查询的列数不同,不能合并,这是我的疏忽,改正之后竟然成功了。心中大喜。马上继续试验,再用AS添加了一个名称为‘t’的列,用来标识每一列的来源,因为,对于这两个表的数据查询结果虽然需要合并,但是查询之后再显示到网页上,点击之后应该链接到不同的程序上显示详细的地址,所以还要是需要区分的。于是最后的结果就是下面这条:
select Id,[P_Name],[P_Update],'product' AS t From [product]
UNION ALL
select id,N_title,N_Update,'news' AS t From [News]
需要注意的就是,这样的结果,会是4列,4列的名称分别是id,P_Name,P_Update,t。N_title这个名称就不再使用了。所以是下面的结果
如果想要得到更理想的结果那就给列用AS起上相应的别名:
select Id,[P_Name] AS [Title],[P_Update] AS [PubDate],'product' AS t From [product]
UNION ALL
select id,N_title,N_Update,'news' AS t From [News]