注册 登录
编程论坛 VFP论坛

请教两表查询

love0428 发布于 2023-01-28 20:42, 1042 次点击
t1(xh,xm,x1,x2,y1,y2,...)
t2(xh,xm,y1,y2,z2,z2...)
关联字段xh,现在要实现两表查询,查询结果包括两表所有字段(去掉重复字段),查询结果xh,xm,x1,x2,y1,y2,z1,z3...,请问怎么写select命令?
说明:两个表字段比较多,重复字段也不少,但内容是一样的。不想在select中一个个字段罗列,求教有没有什么更好的方法?
7 回复
#2
laowan0012023-01-28 20:59
可以写个程序选出不重复的字段名,然后构造SQL语句
如果是固定的两个表,还是麻烦一回一个个的写吧
#3
sdta2023-01-28 21:23
程序代码:
CREATE CURSOR t1 (xm c(10), xh c(10), x1 c(4), x2 c(6))
CREATE CURSOR t2 (xm c(10), xh c(10), y1 c(2), y2 c(6))
AFIELDS(at1, "t1")
AFIELDS(at2, "t2")
lcStr = ""
FOR ln1 = 1 TO ALEN(at1, 1)
    lcStr = lcStr + ",Aa." + at1[ln1, 1]
ENDFOR
lcStr= SUBSTR(lcStr, 2)
FOR ln1 = 1 TO ALEN(at2, 1)
    IF NOT at2[ln1, 1] $ lcStr
        lcStr = lcStr + ",Ab." + at2[ln1, 1]
    ENDIF
ENDFOR
SELECT &lcStr FROM t1 aa, t2 ab
#4
love04282023-01-29 10:14
完美解决问题,非常感谢!
#5
sdta2023-01-29 12:53
以下是引用love0428在2023-1-29 10:14:11的发言:

完美解决问题,非常感谢!

如何解决问题的
#6
love04282023-02-07 15:45
我有两个表,ksb,ksxx。本来是想把表直接改名成t1,t2,但报错提示找不到表,我就用了下面代码实现两表字段整合,非常感谢!
SELECT * FROM ksb INTO TABLE t1
SELECT * FROM ksxx INTO TABLE t2

AFIELDS(at1, "t1")
AFIELDS(at2, "t2")
lcStr = ""
FOR ln1 = 1 TO ALEN(at1, 1)
    lcStr = lcStr + ",Aa." + at1[ln1, 1]
ENDFOR
lcStr= SUBSTR(lcStr, 2)
FOR ln1 = 1 TO ALEN(at2, 1)
    IF NOT at2[ln1, 1] $ lcStr
        lcStr = lcStr + ",Ab." + at2[ln1, 1]
    ENDIF
ENDFOR
SELECT &lcStr FROM t1 aa, t2 ab WHERE aa.ksh=ab.ksh
#7
love04282023-02-07 15:47
回复 5楼 sdta
用的上面的方法
#8
yd19542023-02-07 16:09
回复 6楼 love0428
学习,收藏。
1