18.08.2009, 16:20 | #1 |
Участник
|
всем привет,
возникла задача быстрого сравнения двух идентичных по структуре таблиц. то есть, отфильтровали одну, отфильтровали вторую и нужно определить, являются ли полученные наборы данных в них идентичными. построчно сравнивать все поля - вариант, но как-то неэстетично тем более, что наборы данных могут быть в сотни тысяч записей, а полей в таблицах поболее десятка. никогда раньше не сталкивался с подобными задачами, может у кого уже есть красивое универсальное решение? |
|
18.08.2009, 17:30 | #2 |
Участник
|
Если sql версия - сформируйте SQL запрос вида
select PK_Поле1, .. PK_ПолеN from ТаблцаА A inner join ТаблицаБ B on A.PK_Поле1=B.PK_Поле1 and ... A.PK_ПолеN=B.PK_ПолеN where A.ПолеДляСравнения1<>B.ПолеДляСравнения1 or A.ПолеДляСравнения2<>B.ПолеДляСравнения2 ... or A.ПолеДляСравненияX<>B.ПолеДляСравненияX В качестве результата вернутся различающиеся данные |
|
18.08.2009, 17:38 | #3 |
Участник
|
об sql я уже думал. ) но решение должно быть именно универсальным, потому как среди предполагаемых пользователей есть много таковых, кто пользует native БД.
|
|
18.08.2009, 18:01 | #4 |
Участник
|
Ну тогда только построчное стравнение.
Если не секрет - для чего может использоваться подобный функционал сравнения всех со всеми? |
|
19.08.2009, 09:25 | #5 |
Участник
|
Если нужен только факт различия двух записей, без указания по каким полям и кол-во полей не большое, то возможно подойдет условие типа FORMAT(Rec1) = FORMAT(Rec2).
|
|
19.08.2009, 09:43 | #6 |
Участник
|
|
|
19.08.2009, 11:11 | #7 |
Участник
|
Да это ограничение естественно упускать нельзя, для большей универсальности можно закодить так
Rec1.SETRECFILTER; Rec1 := Rec2; IF Rec1.FIND THEN MESSAGE('Записи совпадают'); |
|
19.08.2009, 13:47 | #8 |
Участник
|
FORMAT - идея хороша, спасибо. надо просмотреть структуры таблиц, возможно, подойдет
SETRECFILTER - оперирует со значениями ключа, но не всех полей. или я не понимаю идею? |
|
19.08.2009, 13:55 | #9 |
Участник
|
Ну надо уточнить, если вы сравниваете записи из одной таблицы, то этот способ то что нужно, тк достаточно сравнить только ключи, если из разных, то тогда только FORMAT с его ограничениями.
|
|