这个SQL怎么写(SQL SERVER 7.0)? -很难的问题,分不够还可以加!! (100分)

  • 主题发起人 主题发起人 ericimex01
  • 开始时间 开始时间
E

ericimex01

Unregistered / Unconfirmed
GUEST, unregistred user!
有三个表:a,b,c
a: b: c:
a1 a2 b1 b2 c1 c2
----------- ---------------- ------------------
1 a1 1 b1_1 1 c1_1
2 a2 1 b1_2 1 c1_2
3 a3 1 b1_3 2 c2_1
4 a4 2 b2_1 2 c2_2
2 c2_3
3 c3_1
现想得出如下表:
a1 a2 b2 c2
----------------------
1 a1 b1_1 c1_1
1 a1 b1_2 c1_2
1 a1 b1_3
2 a2 b2_1 c2_1
2 a2 c2_2
2 a2 c2_3
3 a3 c3_1
4 a4
如何做?
 
分步完成应该可以
 
怎样分步呢?
列出代码如何?
 
这里面A,B,C之间是个什么关系啊?
可不可以说清楚一点
他们之间是通过什么关系进行合并啊?
 
用一个视图轻松搞定
 
select a1,a2,b2,c2
from a left join b on a.a1=b.b1
left join c on a.a1=c.c1
 
to ugvanxk:
老兄,不对啊,结果如下:
a1 a2 b2 c2
----------- ---------- ---------- ----------
1 a1 b1_1 c1_1
1 a1 b1_1 c1_2
1 a1 b1_2 c1_1
1 a1 b1_2 c1_2
1 a1 b1_3 c1_1
1 a1 b1_3 c1_2
2 a1 b2_1 c2_1
2 a1 b2_1 c2_2
2 a1 b2_1 c2_3
3 a1 NULL c3_1
4 a1 NULL NULL
 
你的表结构有问题,应该为b增加主键,然后在b和c之间也建立关联,否则是不可能连接出你预想的样子的。
 
只有外键而没有主键理论上是没有办法连接的
 
[8D][8D][8D][8D][8D][8D][8D]
select a1,a2,b2,c2
from a left outer join b on a.a1=b.b1
left outer join c on a.a1=c.c1
[8D][8D][8D][8D][8D][8D][8D]
 
没法实现吧。。。。
 
B,C表无法联接像那种样子吧。。。
 
相互的約束關系是什麼呀
 
to orlen,fxjpost:
三个表的关系是这样的:
a和b是一对多的关系,通过a1=b1
a和c也是一对多的关系,通过a1=c1
b和c没有关系,所以联接出的结果中b2和c2中的顺序无所谓。
to dragonlee007:
老兄,你的语句和ugvanxk的不是一样的吗?不行啊!
to Traveller:
给b增加主键怎样增加呢?也给出办法啊?

如果实在不行,分步完成也可以啊!大家给点办法吧!!!
 
select identity(int,1,1) as tmp,b1,b2
into #temp1
from b
order by b1,b2
go

select identity(int,1,1) as tmp,c1,c2
into #temp2
from c
order by c1,c2
go

Select BB.b1,BB.b2,CC.c1,CC.c2
Into #temp3
From (select b1,b2,(select count(*)+1 from #temp1 where tmp<AA.tmp and b1=AA.b1) tmpid from #temp1 AA) BB
Full OUTER JOIN
(select c1,c2,(select count(*)+1 from #temp2 where tmp<AA.tmp and c1=AA.c1) tmpid from #temp2 AA) CC
ON BB.b1=CC.c1 and BB.tmpid=CC.tmpid
go

Select a1,a2,b2,c2
From A AA
Full outer join
#temp3 BB
On AA.a1=BB.b1 or AA.a1=BB.c1
order by a1
go
 
to QuickSilver:
你真厉害!!搞定!
能不能留个QQ有空交流一下。
或者加我,我的QQ号码:18110031。
散分!![:D]
 
接受答案了.
 
select d.a1,d.a2,d.b2,c.c2 from (select a.a1,a.a2,b.b2 from a left join b on a.a1=b.b1 ) d left join c on d.a1=c.c1

这样也可以吧?
 
后退
顶部