|
удаление строк таблицы значений |
☑ |
0
Пес1с
26.10.14
✎
22:49
|
Есть 2 тз, в каждой физлицо и сумма. Как удалить строки из первой тз, которые есть во второй тз?
|
|
1
raykom
26.10.14
✎
23:00
|
Строки по какому признаку идентифицируешь ?
|
|
2
Фокусник
26.10.14
✎
23:05
|
(0) перебор 1ой ТЗ с конца, поиск по физлицу во второй ТЗ, если найдено, то удалять строку в первой ТЗ
|
|
3
Пес1с
26.10.14
✎
23:08
|
только перебор?
|
|
4
Torquader
26.10.14
✎
23:08
|
Перебираем меньшую таблицу.
Если это т1, то как сказал (3) с конца, а если т2, то можно и сначала.
Также не мешало бы сделать индексы по полям, по которым идёт сравнение.
|
|
5
Torquader
26.10.14
✎
23:11
|
(3) Можно загрузить обе таблицы в одну, добавив колонку, в которую для первой поставить +1, а для второй -1, тогда потом можно "свернуть" и удалить строки с нулём.
Кстати, интересный вопрос - если в первой таблице две одинаковых строки, а во второй такая одна, то удаляем две или одну ?
|
|
6
Фокусник
26.10.14
✎
23:13
|
(3) сколько миллионов строк в этих ТЗ? :)
|
|
7
Пес1с
26.10.14
✎
23:14
|
двух одинаковых строк там нет, так что можно не париться)
|
|
8
Torquader
26.10.14
✎
23:14
|
Не, ну можно и запросом выбрать из первой то, чего нет во втором, только вот будет ли это быстрее перебора - ещё тот вопрос.
|
|
9
FlashC
26.10.14
✎
23:15
|
(0) откуда тз формируете? может, логичнее было бы задать вопрос как получить тз с таким то условием. не клюшки же)
|
|
10
Torquader
26.10.14
✎
23:15
|
Левое соединение и условие на Null
|
|
11
raykom
26.10.14
✎
23:19
|
+(5) объединяем в одну таблицу, добавлям оинаковый признак, колонку число, единичку, на пример.
И сворачиваем все это дело
Табл.Свернуть("ФИО, Сума","Кол");
Для лл=1 По Табл.КоличествоСтрок() Цикл
кол=Табл.ПолучитьЗначение(лл,"Кол");
Если кол>1 Тогда
\\УДаляем строку
КонецЦикла;
|
|
12
raykom
26.10.14
✎
23:25
|
+(11)Только это для клюшек было )))
|
|
13
raykom
26.10.14
✎
23:25
|
Ну без разницы. Работать будет, а вот уж по скорости - хз.
|
|
14
Torquader
26.10.14
✎
23:26
|
(13) По скорости лучше вообще не получать таблицу, из которой нужно что-то удалить, а удалять сразу из запроса, её формирующего.
|
|
15
Sorm
26.10.14
✎
23:28
|
(13) Вопрос в количестве строк. Если хотим переложить на DB сервер - все во временные таблицы, проиндексировать, левое соединение, взять строки, где Null справа, очистить первую таблицу, загрузить из результата запроса.
|
|
16
raykom
26.10.14
✎
23:30
|
(14)Ну так оно. Но это уже не три строки. Да и понимания надо больше, чем для (13)
|
|
17
Пес1с
27.10.14
✎
01:20
|
Всем спасибо, сделал через запрос)
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший