假设我有2个数据集:A和B,它们具有相同的列。我想获得“距离路径” - 需要完成的最少操作,将数据集A更改为B。
我可以假设,A和B只包含很少的差异,我正在寻找更好的东西,然后:
如何归档?
答案 0 :(得分:3)
如果您知道如何使用SQL:
SELECT a.* FROM a
LEFT JOIN b on (a.field1 = b.field1 AND a.field2 = b.field2 AND ....)
WHERE b.field1 IS NULL
将为您提供A中不在B中的所有字段。
现在做
INSERT INTO b
SELECT a.* FROM a
LEFT JOIN b on (a.field1 = b.field1 AND a.field2 = b.field2 AND ....)
WHERE b.field1 IS NULL
然后做(或根据您的需要不做)。
DELETE b FROM b
LEFT JOIN a ON (a.field1 = b.field1 and a.field2 = b.field2 AND ...)
a.field1 IS NULL
现在表a
和b
将是相同的。
procedure TForm1.equalize(A, B: TDataset);
var
tablenameA: string;
tablenameB: string;
MyQuery: TQuery;
begin
tablenameA:= IProviderSupport(A).PSGetTableName;
tablenameB:= IProviderSupport(B).PSGetTableName;
MyQuery:= TQuery.Create(self);
MyQuery.Database:= .....
MyQuery.SQL.Text:= ' INSERT INTO '+tablenameA+' .....
MyQuery.ExecSQL;
end;
答案 1 :(得分:2)
如果您想了解如何将A转换为B,您需要知道A和B之间的区别。有一个非常简单的通用算法,虽然它可能会更复杂,具体取决于数据集中有多少字段,以及它们中有多少字段可以从A到B不同。但这里有一般概念:
less than
,equal
或greater than
的比较进行比较。完成后,您将获得A和B之间差异的完整列表,这将使转换A到B所需的步骤变得简单来计算。