3257_zh-TW
比較行是否相等我有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