SQL语句之查询表合并

SQL语句强大的,完美的,使用它可以完成各种可能的需求。下边就说说今天遇到的问题,一同事在做读取数据时,碰到这样的疑惑,分别从两个表中读取数据,读取的字段不一样,但最后呈现的列都是一样的。能否有办法一次合并这两个表中的数据到前台进行输出呢?因为在Silverlight进行开发时,读取数据的操作都是异步操作,如果对于此过程,使用两次查询完成两个表数据的读取,除了浪费性能,在代码的同步性上也有所下降,此问题的出现,我觉得SQL肯定是可以的,就帮这同事处理之,果然很快就解决了,现分享给大家。

先说一下涉及到的两个表:

考试表:ExamTB

涉及字段:EId int,EName varchar(50),SubjectId int,EStartTime datetime

任务表:TaskTB

涉及字段:TId int,TName varchar(50),SubjectId int,TStartTime datetime

当然这两个表还有其他一些不一样的字段,此处忽略,但查询出来的就是如上字段,两个表查询出相同的东西,现在就是要把两个查询的结果合并到一个表中输出出来,当然额外加一个字段Type标识是考试表,还是任务表中的数据,原始的想法:

select EId,EName ,SubjectId ,EStartTime ,1 as type from ExamTB

select TId ,TName ,SubjectId ,TStartTime ,2 as type from TaskTB

一看就明了,虽然从两个不同的表中读取数据,但显示的结果都是一样的,要是能从一个表出去,效果特好,想到连表把两个表连在一个表,不行呀

没有相互关联的字段。此时想到的临时表,对使用临时表把记录都存在一块不就可以了。

怎么存储呢,不会用游标逐一循环表,实现插入吧,那也太折腾了,经分析不用使用此功能即可实现相应的功能。

具体代码如下:

--创建用于存储相同数据的临时表
CREATE TABLE #TempTB (
TId
int,
TName
varchar(50),
SubjectId
int,
TType
int
)
--插入考试表数据,1表示是考试
insert into #TempTB(TId,TName,SubjectId,TType)
select EId,EName,SubjectId,EStartTime ,1
from ExamTB
--插入任务表数据,2表示此数据是来自任务表
insert into #TempTB(TId,TName,SubjectId,TType)
select TId,TName,SubjectId,TStartTime,2
from TaskTB
--输出数据
select * from #TempTB
--删除临时表
drop table #TempTB

通过如上的方法,完成查询相同数据内容,在同一个表的输出,方法行之有效,当然涉及到相关业务逻辑,已经省略,此处只针对对应的需求,对涉及的关联和各种业务逻辑,进行删除。通过以上例子,是不是觉得SQL很能帮我们干可能涉及到的任务事情。

ok,大家有什么好方法,多交流呀。

感谢大家一如既往的支持,多发好文,多评论。

posted @ 2011-06-27 15:41 Wendy 's 阅读(...) 评论(...) 编辑 收藏