我有一个大学项目的bdf文件,我想从另一个表中检索给定匹配条件的值,测试每条记录(它们具有相同的id_number并且它们不符合另一个条件)。我一直坚持这一点,因为在进行替换时它只需要从表中获取第一个参考值(而不是符合条件的参考值)。那些没有条件1.Mp_id == d2.po
在参考表中添加ship2
,以及其余不符合条件的,添加ship2
寻找参数prod_code
从参考表中检索ship2
。
CLOSE DATABASES
USE Ruta + "FILE.dbf" IN 0 ALIAS d1
USE Ruta2 + "REFERENCE.dbf" IN 0 ALIAS d2
SELECT d1
ALTER TABLE d1 ADD COLUMN ship c(10) &&create new column to fill in the reference
SELECT d2
GO TOP
DO WHILE !EOF()
SELECT d1
REPLACE d1.ship WITH d2.ship2 FOR d1.Mp_id == d2.po
REPLACE d1.ship WITH d2.ship2 FOR d1.prod_code == d2.prod AND d1.Mp_id != d2.po
SELECT d2
SKIP
ENDDO
CLOSE DATABASES ALL
提前谢谢了!
不幸的是,“给你”代码不会“教你”任何关于如何做到这一点。 下面的代码被快速记下来并没有经过测试,但是如果您花一些时间使用推荐的教程视频,您应该能够判断以下内容是否适用于您,如果没有,则可能需要更改。
USE Ruta2 + "REFERENCE.dbf" IN 0 ALIAS d2 EXCL && Open 'Child' table
SELECT D2
INDEX ON po TAG Po && Index table on po field values
INDEX ON prod TAG Prod && Index table on prod field values
SET ORDER TO po && 'Activate' 'child' table Po index
USE Ruta + "FILE.dbf" IN 0 ALIAS d1 && Open 'Parent' table
SELECT D1
ALTER TABLE d1 ADD COLUMN ship c(10) &&create new column to fill in the reference
SET RELATION TO id INTO D2 && set relation such that d1.id = d2.po
REPLACE ALL d1.ship with d2.ship2 FOR !EMPTY(d2.po)
SELECT D2
SET ORDER TO Prod && 'Activate' 'child' table Prod index
SELECT D1
SET RELATION TO prod_code INTO D2 && set relation such that d1.prod_code = d2.prod
REPLACE ALL d1.ship WITH d2.ship2 FOR !EMPTY(d2.prod) AND d1.Mp_id != d2.po
祝好运
正如我所说,如果没有一些样本数据和样本输出,你不清楚你要做什么。
您可以使用此单个更新语句替换while ... enddo:
Update d1 ;
Set ship = d2.ship ;
from d2 ;
where d1.Mp_Id == d2.po Or d1.Prod_Code == d2.Prod