日期:2014-05-18  浏览次数:20421 次

又增加条件了
有三张表:
table1                                 table2
p_code,p_name                           p_code,pin_number,pin_date
0001           A                                   0001         324               2007-6-1  
0002           B                                   0002         433               2007-6-3
                                                      0002         222               2007-6-1


table3
p_code,pout_number,pout_date
0002             4334             2007-6-1
0001             3244             2007-6-4

怎样输出:
 
p_code,pin_date,pin_number,pout_date,pout_number
0002       2007-6-1       222                 2007-6-1       4334
0001       2007-6-1       324                    
0001                                               2007-6-4       3244
0002       2007-6-3       433                  



------解决方案--------------------
if object_id( 'test1 ') is not null
drop table test1
create table test1(
P_id int ,
P_name varchar(10)
)
if object_id( 'test2 ') is not null
drop table test2
create table test2(
P_id int,
Pin_num int,
Pin_date varchar(10)
)
if object_id( 'test3 ') is not null
drop table test3
create table test3(
P_id int,
Pout_num int,
Pout_date varchar(10)
)

insert into test1
select 1, 'a ' union
select 2, 'b '

insert into test2
select 1,324, '2007-6-1 ' union
select 2,433, '2007-6-3 ' union
select 2,222, '2007-6-1 '

insert into test3
select 2,4334, '2007-6-1 ' union
select 1,3244, '2007-6-4 '

select distinct * from (
select d.p_id,pin_num,pin_date,pout_num,pout_date from (select a.p_id,pin_num,pin_date from
test1 a left join test2 b on a.p_id=b.p_id) d left join
test3 c on c.p_id=d.p_id and d.pin_date= c.pout_date
union
select d.p_id,pin_num,pin_date,pout_num,pout_date from (select a.p_id,pout_num,pout_date from
test1 a left join test3 b on a.p_id=b.p_id) d left join
test2 c on c.p_id=d.p_id and d.pout_date= c.pin_date) e