日期:2014-05-17  浏览次数:20920 次

求多表连接的SQL语句
表1
RQ                     Name
2007-1-1         aa
2007-1-2         bb
2007-1-3         cc
2007-1-4         dd
2007-1-5         ee
2007-1-6         ff

表2
RQ                     Numb
2007-1-3         10
2007-1-6         12

查询得到:
2007-1-1         aa         10
2007-1-2         bb         10
2007-1-3         cc         10
2007-1-4         dd         12
2007-1-5         ee         12
2007-1-6         ff         12

也就是以RQ做连接,两个表连接查询


------解决方案--------------------
--写个函数更容易实现

create table t5(rQ date, Name varchar2(100));
insert into t5
select to_date( '2007-1-1 ', 'yyyy-mm-dd '), 'aa ' from dual union all
select to_date( '2007-1-2 ', 'yyyy-mm-dd '), 'bb ' from dual union all
select to_date( '2007-1-3 ', 'yyyy-mm-dd '), 'cc ' from dual union all
select to_date( '2007-1-4 ', 'yyyy-mm-dd '), 'dd ' from dual union all
select to_date( '2007-1-5 ', 'yyyy-mm-dd '), 'ee ' from dual union all
select to_date( '2007-1-6 ', 'yyyy-mm-dd '), 'ff ' from dual;
/
create table t6(rQ date, Numb int);
insert into t6
select to_date( '2007-1-3 ', 'yyyy-mm-dd '),10 from dual union all
select to_date( '2007-1-6 ', 'yyyy-mm-dd '),12 from dual;
--创建函数
create or replace function getNumb( arq in date ) return int
is
rst int;
begin
select numb into rst from t6 where arq <=rq and rownum=1;
return rst;
exception
when others then
rst:=0;
end;
--执行查询
select a.*,getNumb(a.rq) numb
from t5 a

--输出结果
2007-1-1 aa 10
2007-1-2 bb 10
2007-1-3 cc 10
2007-1-4 dd 12
2007-1-5 ee 12
2007-1-6 ff 12
------解决方案--------------------
SELECT rq, NAME, MIN (numb)
FROM (SELECT a.*, b.numb
FROM 表1 a, 表2 b
WHERE a.rq <= b.rq) d
GROUP BY rq, NAME
这样不就ok了吗?