回 帖 发 新 帖 刷新版面

主题:一字段包含另一表字段

有表a1.dbf二万多记录,包含2个字段c(字符型)和g(字符型);
另一个表cb.dbf二万多记录,
亦包含2个字段yhh(字符型)和zcbh(字符型)。
现简单列出二个表的其中三条记录如下:

     cb.dbf                        a1.dbf

  yhh       zcbh                c        g
100001   aef0175689Y          102689    756
100018   123456789            101563    951
103547   9873682              104278    87368

现想将凡是表cb.dbf中字段zcbh包含表a1.dbf中字段g的
记录生成1个新表b1.dbf如下:

 yhh       zcbh          c        g
100001   aef0175689Y   102689    756
103547   9873682       104278   87368

请问代码如何写,谢谢!

回复列表 (共14个回复)

沙发

SELECT a1.*,cd.* FROM a1,cd WHERE TRIM(cd.zcbh $ a1.g

SELECT a1.*,cd.* FROM a1,cd WHERE AT(TRIM(cd.zcbh),a1.g)>0

板凳

SELECT a1.*,cd.* FROM a1 INNER JOIN cd ON AT(TRIM(cd.zcbh),a1.g)>0

3 楼

这是一种特殊的连接,你试试看,那种速度快、准确!

我在少纪录的情况下。测试结果是正确的!

请将测试结果和正确性告知为盼~~!

4 楼

在命令窗口输入:

d1= SECONDS( )
SELECT a1.*,cd.* FROM a1,cd WHERE AT(TRIM(cd.zcbh),a1.g)>0 into dbf 结果表
? "用时",(SECONDS( )-d1),"秒"
BROWSE

5 楼

SELECT a1.*,cd.* FROM a1,cd WHERE TRIM(cd.zcbh) $ a1.g
上面这条代码我在VF6运行显示错误,我没有VF9,所以不知在VF9能否运行。
下面两条代码运行我举例的三条记录是正确的,但是在我实际记录里(几千条记录)运行的时候
没有得到正确的记录,现我将a1.dbf表cb.dbf表上传,
下载地址:http://www.meizvfp.com/bbs/viewFile.asp?flag=1&BoardID=2&ID=34352
或者http://bbs.pfan.cn/downfile.asp?fileid=2566
现简单列出其中生成的正确结果应包括两条记录g字段等于219191和等于10282
SELECT a1.*,cd.* FROM a1,cd WHERE AT(TRIM(cd.zcbh),a1.g)>0
SELECT a1.*,cd.* FROM a1 INNER JOIN cd ON AT(TRIM(cd.zcbh),a1.g)>0

6 楼

在VF6中运行正确。按cbl518老师的测试时间为:10.040秒。但对于1760条记录来说可能有一点儿慢了。

7 楼

这是一例:无连接交叉查询的范例,所以它的速度和准确性值得探讨!

8 楼

不知道这样的结果对不对:

SELECT cb.*,a1.* FROM cb,a1 WHERE ALLTRIM(cb.zcbh) in (a1.g) into table 结果表

用时41秒。

9 楼

我想是我撞鬼了。

10 楼

班主数据前面带有空格,与你给的示例数据不同,所以结果都是错误的!

SELECT a1.*,cd.* FROM a1,cd WHERE AT(ALLTRIM(cd.zcbh),a1.g)>0

SELECT a1.*,cd.* FROM a1 INNER JOIN cd ON AT(ALLTRIM(cd.zcbh),a1.g)>0

vfp 9: 以上的结果是 1760 条记录,速度在 p4 机中,20秒之内。

我来回复

您尚未登录,请登录后再回复。点此登录或注册