3257_zh-CN
比较行是否相等我有2个数据表具有相同的列格式,但行数不同。一些列类型是字符串,其他列是整数。
我想编写一个脚本,一次一行地通过table_1,看看table_2中是否有相同的行(基于行中的列元素)。
我是否必须逐元素地比较相等列,或者是否有快速比较整行的方法?如果它有所不同,我不需要知道哪个table_2行相等,我只需要知道是否有一个值相等的行。
谢谢,
法案回复:比较行是否相等如果想避免对表 A 和表 B 的所有行分别进行双重循环,可以分别在每个表中添加一列,用于指示该列中的所有行来自哪个表(例如“A”或“B”)。然后,将两个表合并成一个表,并按包含最大值范围的一列或两列对合并后的表进行排序。接下来,逐行遍历合并后的表,查找每一行与其前面所有具有相同列值的行之间的匹配项。如果找到匹配项,并且发现这些行的额外列中一个位置为“A”,另一个位置为“B”,那么(也只有在这种情况下)才需要逐项比较所有其他列。这样,只需一次遍历即可完成表的搜索(如果发现多行几乎相同,则需要进行一些额外的比较),而无需使用双重循环。
如果可以用一条语句比较两个表中的整行数据,我不知道是什么方法,但至少上面的方法在处理相对较大的表时应该能稍微提高速度。回复:比较行是否相等谢谢你,大卫。
你启发了我,让我想到一个类似的方法。对于一个表格,我为每一行创建了一个字符串,其中包含了该行的所有元素。然后,我将该字符串插入到一个列表中。同样地,我为第二个表格中的每一行也创建了一个字符串,并检查它是否包含在列表中。
dtOld = 数据表("oldDelta");
dtNew = 数据表("Delta");
nr = N 行( dtOld );
nc = N Cols( dtOld );
oldList = {};
对于(j = 1,j <= nr,j++,
oldString = "";
对于(k = 1,k <= nc,k++,
oldString = oldString || Char( Column( dtOld, k ) )
);
Insert Into( oldList, oldString );
);
nr = N 行( dtNew );
对于(j = 1,j <= nr,j++,
newString = "";
对于(k = 1,k <= nc,k++,
newString = newString || Char( Column( dtNew, k ) )
);
如果(包含(旧列表,新字符串),
打印(j)
);
);
消息由 Bill E 编辑回复:比较行是否相等您也可以尝试将这两个表合并成一个新表。“where”语句应该是这样的:
col1A = col1B
且 col2A = col2B
且 col3A = col3B
ETC。
最终得到的表格将包含重复项。不过,如果列数很多,这会相当繁琐。
Comments
There are no comments yet