标题:请教一下多表合并的问题。
只看楼主
redrum0618
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2020-11-7
结帖率:57.14%
已结贴  问题点数:20 回复次数:14 
请教一下多表合并的问题。

如图,我有3个表A,B,C
想要合成一个表D,表D的编号和型号是从A表来的,因为是全的,数据1是从B表来的,数据2是从C表来的,数据1和数据2不一定全,如果没有A表对应型号的数据,那最后D表中就设为0。

我是用的笨办法,先建好表D,再把A表数据insert进去,再根据B,C表的数据通过编号来更新,这样感觉有点慢,有老师有更好更快的方法吗?
搜索更多相关主题的帖子: 编号 多表 合并 数据 型号 
2021-03-06 20:35
redrum0618
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2020-11-7
得分:0 
最好是用一条SQL命令一步搞定,那样就好了。
2021-03-06 20:37
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:7 
回复 2楼 redrum0618
一般思路,没有数据测试,先A表 与 B表 左连接成 AA,A表 与 C表左连接成 BB,再AA 与 BB 成 结果。
只是完成一句SQL,但不是最快的哈,仅供参考,应该还有更简单的,一时没有想到哈,哈哈^_^
从给出的数据看,B表、C表中的编号应该是字符型的吧。
程序代码:
select AA.编号,AA.型号,AA.数据1,BB.数据2 ;
       from ;
       (select A表.编号,A表.型号,B表.数据1 from A表 Left Join B表 ON alltrim(A表.编号)==alltrim(B表.编号)) AA ;
       Left Join ;
       (select A表.编号,A表.型号,C表.数据2 from A表 Left Join C表 ON alltrim(A表.编号)==alltrim(C表.编号)) BB ;
       ON alltrim(AA.编号)==alltrim(BB.编号)


[此贴子已经被作者于2021-3-7 06:43编辑过]

2021-03-07 06:38
redrum0618
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2020-11-7
得分:0 
回复 3楼 schtg
谢谢,等下我试试,现在功能是有了,就是数据多的时候速度有点慢,因为要更新两次,所以几千条数据都要七八分钟。
2021-03-07 08:07
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:7 
index + set relation

坚守VFP最后的阵地
2021-03-07 09:00
redrum0618
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2020-11-7
得分:0 
回复 5楼 sdta
老师能不能就这A,B,C三张表的字段写个示范,我刚学不久还不会写你这个。
2021-03-07 09:07
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
如果真是新手, 不建议开始就学SQL命令的相关内容。如果数据不保密,上传相关表

坚守VFP最后的阵地
2021-03-07 09:10
redrum0618
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2020-11-7
得分:0 
回复 7楼 sdta
示例.rar (2.05 KB)

数据结构就是这样子的,示例里是表AA,表BB,表CC,最后合并成DD表。
2021-03-07 09:31
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
* VFP9 代码
CREATE CURSOR t1 (编号 c(10), 型号 c(22))
INSERT INTO t1 VALUES ("01", "a")
INSERT INTO t1 VALUES ("02", "b")
INSERT INTO t1 VALUES ("03", "c")
INSERT INTO t1 VALUES ("04", "d")

CREATE CURSOR t2 (编号 c(10), 数据1 n(10))
INSERT INTO t2 VALUES ("02", 2)
INSERT INTO t2 VALUES ("04", 4)

CREATE CURSOR t3 (编号 c(10), 数据2 n(10))
INSERT INTO t3 VALUES ("01", 1)
INSERT INTO t3 VALUES ("03", 3)
INSERT INTO t3 VALUES ("04", 4)

CREATE CURSOR t4 (编号 c(10), 型号 c(22), 数据1 n(10), 数据2 n(10))
INSERT INTO t4 (编号, 型号) SELECT 编号, 型号 FROM t1
INDEX on 编号 TAG bh
lc = "t2,t3"
ALINES(la, lc, ",")
FOR lnj = 1 TO ALEN(la, 1)
    SELECT (la[lnj])
    SET RELATION TO 编号 INTO t4
    SCAN 
        REPLACE ("数据" + STR(lnj, 1)) WITH EVALUATE(la[lnj] + ".数据" + STR(lnj, 1)) IN t4
    ENDSCAN
ENDFOR
SELECT t4
SET ORDER TO 
BROWSE 

坚守VFP最后的阵地
2021-03-07 09:54
redrum0618
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2020-11-7
得分:0 
谢谢,消化一下。
2021-03-07 10:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505030-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.075846 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved