запрос not exists #675090


#0 by prishliemail
Добрый день! Необходимо выбрать договора, которые есть в одной таблице, но нет в другой. В SQL делала бы с помощью not exists. Но в 1С такого оператора нет и не могу понять как его заменить. Подскажите пожалуйста как это сделать.
#1 by sda553
левое соединение и в конце where справадоговор есть NULL
#2 by ДенисЧ
левое соединение и условие ЕСТЬ NULL
#3 by Fragster
не в (выбрать траляля), но лучше
#4 by shuhard
[В SQL делала бы с помощью not exists. Но в 1С такого оператора нет ] есть
#5 by prishliemail
Спасибо! И как он называется? Так и писать not exists?
#6 by ДенисЧ
читай
#7 by Maxus43
В = IN в скуле, не совсем то
#8 by prishliemail
ну это больше на not in похоже
#9 by prishliemail
Вообщем я поняла) Всем спасибо!
#10 by Ёпрст
так и есть. Нет реализации exists в снеговике, которая гораздо быстрее работает чем in
#11 by Fragster
(поле1,поле2) В (Выбрать траляля) преобразуется в EXISTS
#12 by Maxus43
а просто Поле1 В (выбрать траляля) в IN? сервер 1с преобразует в exists только когда несколько полей, чего не поддерживает IN
#13 by Fragster
сейчас посмотрел в профайлер... интересно отражается реквизит ЭтоГруппа... CASE WHEN NOT _Reference79_Q_001_T_001._Folder = 0x01 THEN 0x00 END AS f_5
#14 by ДенисЧ
не напутал?
#15 by Maxus43
странно...
#16 by Fragster
неа...
#17 by Fragster
кстати эксистс вызывается просто:             ИЗ                 ТЗ)
#18 by Fragster
ВЫБРАТЬ SELECT _Reference79_Q_001_T_001._IDRRef AS f_1, _Reference79_Q_001_T_001._Marked AS f_2, _Reference79_Q_001_T_001._IsMetadata AS f_3, _Reference79_Q_001_T_001._ParentIDRRef AS f_4, CASE WHEN NOT _Reference79_Q_001_T_001._Folder = 0x01 THEN 0x00 END AS f_5, _Reference79_Q_001_T_001._Code AS f_6, _Reference79_Q_001_T_001._Description AS f_7 FROM _Reference79 _Reference79_Q_001_T_001 WITH(NOLOCK) WHERE EXISTS( SELECT #T631865445ffd458d981e5607e594c885_Q_002_T_001._Q_000_F_000RRef AS _Q_002_F_000RRef, 0x01 AS _Q_002_F_001 FROM #tt13 #T631865445ffd458d981e5607e594c885_Q_002_T_001 WITH(NOLOCK) WHERE _Reference79_Q_001_T_001._IDRRef = #T631865445ffd458d981e5607e594c885_Q_002_T_001._Q_000_F_000RRef)
#19 by Maxus43
Быстрей ли будет? На маленьких и больших объёмах вложенной выборки?
#20 by Serginio1
Видно для сортировки флаг для групп 0, для элементов 1
#21 by Fragster
просто не в: 479 мс не в с отбором вложенного запроса: 485 мс (Номенклатура, Истина )не в: 478 мс надо посложнее что-то
#22 by Fragster
но вообще где много совпадений (заменил НЕ В на В, чтобы было больше) вариант стабильно чуть быстрее, но надо смотреть в каждом случае. Для В внутреннее соединение быстрее, для "не в" - быстрее (поле,истина) чем левое и есть NULL, но все равно надо экспериментировать в каждом конкретном случае, ИМХО
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С