![]() |
|
Проверить что 2 таблицы различны | ☑ | ||
---|---|---|---|---|
0
Гёдза
15.10.15
✎
15:57
|
Есть две таблицы Т1 и Т2 с одной колонкой "Значение".
Какой самый хороший способ проверить что они различны? те хоть в одной есть отличное значение |
|||
1
ДенисЧ
15.10.15
✎
15:58
|
запросом
|
|||
2
Гёдза
15.10.15
✎
15:59
|
ну это понятно, вопрос каким?
|
|||
3
Timon1405
15.10.15
✎
15:59
|
(0) БСП power))
// Сравнивает данные сложной структуры с учетом вложенности. // // Параметры: // Данные1 - Структура, ФиксированнаяСтруктура - // - Соответствие, ФиксированноеСоответствие - // - Массив, ФиксированныйМассив - // - ХранилищеЗначения, ТаблицаЗначений - сложные типы для сравнения. // - Строка, Число, Булево - простые типы, которые можно сравнивать на равно. // // Данные2 - Произвольный - те же типы, что и для параметра Данные1. // // Возвращаемое значение: // Булево. // Функция ДанныеСовпадают(Данные1, Данные2) Экспорт Если ТипЗнч(Данные1) <> ТипЗнч(Данные2) Тогда Возврат Ложь; КонецЕсли; Если ТипЗнч(Данные1) = Тип("Структура") ИЛИ ТипЗнч(Данные1) = Тип("ФиксированнаяСтруктура") Тогда Если Данные1.Количество() <> Данные2.Количество() Тогда Возврат Ложь; КонецЕсли; Для каждого КлючИЗначение Из Данные1 Цикл СтароеЗначение = Неопределено; Если НЕ Данные2.Свойство(КлючИЗначение.Ключ, СтароеЗначение) ИЛИ НЕ ДанныеСовпадают(КлючИЗначение.Значение, СтароеЗначение) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; ИначеЕсли ТипЗнч(Данные1) = Тип("Соответствие") ИЛИ ТипЗнч(Данные1) = Тип("ФиксированноеСоответствие") Тогда Если Данные1.Количество() <> Данные2.Количество() Тогда Возврат Ложь; КонецЕсли; КлючиНовогоСоответствия = Новый Соответствие; Для каждого КлючИЗначение Из Данные1 Цикл КлючиНовогоСоответствия.Вставить(КлючИЗначение.Ключ, Истина); СтароеЗначение = Данные2.Получить(КлючИЗначение.Ключ); Если НЕ ДанныеСовпадают(КлючИЗначение.Значение, СтароеЗначение) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Для каждого КлючИЗначение Из Данные2 Цикл Если КлючиНовогоСоответствия[КлючИЗначение.Ключ] = Неопределено Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; ИначеЕсли ТипЗнч(Данные1) = Тип("Массив") ИЛИ ТипЗнч(Данные1) = Тип("ФиксированныйМассив") Тогда Если Данные1.Количество() <> Данные2.Количество() Тогда Возврат Ложь; КонецЕсли; Индекс = Данные1.Количество()-1; Пока Индекс >= 0 Цикл Если НЕ ДанныеСовпадают(Данные1.Получить(Индекс), Данные2.Получить(Индекс)) Тогда Возврат Ложь; КонецЕсли; Индекс = Индекс - 1; КонецЦикла; Возврат Истина; ИначеЕсли ТипЗнч(Данные1) = Тип("ТаблицаЗначений") Тогда Если Данные1.Количество() <> Данные2.Количество() Тогда Возврат Ложь; КонецЕсли; Если Данные1.Колонки.Количество() <> Данные2.Колонки.Количество() Тогда Возврат Ложь; КонецЕсли; Для каждого Колонка Из Данные1.Колонки Цикл Если Данные2.Колонки.Найти(Колонка.Имя) = Неопределено Тогда Возврат Ложь; КонецЕсли; Индекс = Данные1.Количество()-1; Пока Индекс >= 0 Цикл Если НЕ ДанныеСовпадают(Данные1[Индекс][Колонка.Имя], Данные2[Индекс][Колонка.Имя]) Тогда Возврат Ложь; КонецЕсли; Индекс = Индекс - 1; КонецЦикла; КонецЦикла; Возврат Истина; ИначеЕсли ТипЗнч(Данные1) = Тип("ХранилищеЗначения") Тогда Если НЕ ДанныеСовпадают(Данные1.Получить(), Данные2.Получить()) Тогда Возврат Ложь; КонецЕсли; Возврат Истина; КонецЕсли; Возврат Данные1 = Данные2; КонецФункции |
|||
4
Живой Ископаемый
15.10.15
✎
15:59
|
то есть само значение не важно? Тогда сортирвкой, получением хэша и сравнением его
|
|||
5
18_plus
15.10.15
✎
15:59
|
||||
6
Гёдза
15.10.15
✎
16:01
|
(4) нет не важно
Не таблицы значений, а таблицы в бд. Вернее даже одна тз, а другая в бд |
|||
7
Сторно абсурда
15.10.15
✎
16:04
|
(2) например, вложенный запрос - объединение , доп поле число 1 для одной таб, - 1 для другой и во внешнем группировка по значению и имеющие Сумма (доп поле)<> 0
|
|||
8
Лефмихалыч
15.10.15
✎
16:42
|
полное соединение по
где А.поле есть Null или Б.поле есть null |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |