求更简略的代码:根据两表之间对应关系,在另一表中生成对应数据

求更简单的代码:根据两表之间对应关系,在另一表中生成对应数据
本帖最后由 lau12 于 2012-12-21 12:34:57 编辑
求更简略的代码:根据两表之间对应关系,在另一表中生成对应数据
b1结果<br>求更简略的代码:根据两表之间对应关系,在另一表中生成对应数据b2<br>[求更简略的代码:根据两表之间对应关系,在另一表中生成对应数据b1

b1: a、b、c 
b2: a、d1、d2、d3
b1表的a字段与b2表中a字段相同,根据b2字段的d1、d2、d3列,a表对应生成一行数据

目前操作如下: 
先在b1表中新建f1、f2、f3 字段,类型,字段长度与b2表中的d1、d2、d3相同
use b2 alias b2
scan all
update b1 set f1=b2.d1 where b1.a=b2.a
update b1 set f2=b2.d2 where b1.a=b2.a
update b1 set f3=b2.d3 where b1.a=b2.a
endscan
得到b1表如下
a、b、c、f1、f2、f3
再append from 3次
请问,有无更简便的方式得上述结果了。

------解决方案--------------------
select * from b1 a 
inner join 
(select c,d1 from b2
union all
select c,d2 from b2
union all
select c,d3 from b2) b
on a.c=b.c
where b.d1 is not null
------解决方案--------------------
select a.*,b.c as newc,d1 from b1 a ;
 inner join ;
 (select c,d1 from b2;
 union all;
 select c,d2 from b2;
 union all;
 select c,d3 from b2) b;
 on a.c=b.c;
 where b.d1 is not null AND LEN(ALLTRIM(d1))>0 ORDER BY 4
------解决方案--------------------
CREATE CURSOR B2 (C C(3),D1 C(5),D2 C(6),D3 C(6))
INSERT INTO B2 VALUES([123],[名称1],[名称二],[])
INSERT INTO B2 VALUES([234],[名称1],[],[名称三])
INSERT INTO B2 VALUES([567],[名称1],[名称四],[名称五])

CREATE CURSOR B1 (A C(5),B C(5),C C(3))
INSERT INTO B1 VALUES([信息1],[信息1],[123])
INSERT INTO B1 VALUES([信息1],[信息1],[234])
INSERT INTO B1 VALUES([信息1],[信息1],[567])

SELECT A.*,D1 FROM B1 A ;
LEFT JOIN (SELECT C,D1 FROM B2 UNION ALL SELECT C,D2 FROM B2 UNION ALL ;
SELECT C,D3 FROM B2) B ON A.C==B.C WHERE NOT EMPTY(D1)

抄袭版主的,等于学习一遍。
------解决方案--------------------
交叉表?
vfp 已提供了工具代码,直接调用即可