日期:2014-05-16  浏览次数:20460 次

从两个表提取数据问题
如果A表,有aid-aman-logindate
B表,bid-bman-logindate
现在根据要查人员(如编号111)的A表和B表的所有记录,并且按logindate降序排列(即aman和bman是等于111的数据提取出来)
直接使用我实在想不出来怎么做了。是要用视图之类的处理出一张虚拟表来进行使用吗?还是有其他的方法。
请给个例子看看。(因为实际项目很复杂,如果能够直接查询最好)
------解决方案--------------------
引用:
Quote: 引用:

留意注释
select id,man,logindate ,remark

from 
(
select aid id,aman man,logindate ,remark
from a
where aman='111'
union all 
select bid,bman,logindate,'' --如果你的“空”是指null,就把这里的''换成null
from b
where bman='111'
)a
order by logindate desc

要是我有A,B,C,D4个表,这样查询出来,怎么知道一条记录是哪个表中的呢?


增加一个tb字段,表示这条记录,是哪个表的:
select tb,   --增加这一列,表示这条数据是那个表的
       id,man,logindate ,remark

from 
(
select 'A' as tb,aid id,aman man,logindate ,remark
from a
where aman='111'
union all 
select 'B',bid,bman,logindate,'' --如果你的“空”是指null,就把这里的''换成null
from b
where bman='111'
)a
order by logindate desc

------解决方案--------------------
union all 

引用:
Quote: 引用:

留意注释
select id,man,logindate ,remark

from 
(
select aid id,aman man,logindate ,remark
from a
where aman='111'
union all 
select bid,bman,logindate,'' --如果你的“空”是指null,就把这里的''换成null
from b
where bman='111'
)a
order by logindate desc

要是我有A,B,C,D4个表,这样查询出来,怎么知道一条记录是哪个表中的呢?
union all的上下几个结果集的select中加上如'a' as tablename