|   |   | 
| 
 | запрос not exists | ☑ | ||
|---|---|---|---|---|
| 0
    
        prishliemail 31.07.13✎ 10:40 | 
        Добрый день!
 Необходимо выбрать договора, которые есть в одной таблице, но нет в другой. В SQL делала бы с помощью not exists. Но в 1С такого оператора нет и не могу понять как его заменить. Подскажите пожалуйста как это сделать. | |||
| 1
    
        sda553 31.07.13✎ 10:41 | 
        левое соединение и в конце where справадоговор есть NULL     | |||
| 2
    
        ДенисЧ 31.07.13✎ 10:41 | 
        левое соединение и условие ЕСТЬ NULL     | |||
| 3
    
        Fragster модератор 31.07.13✎ 10:56 | 
        не в (выбрать траляля), но лучше (1)(2)     | |||
| 4
    
        shuhard 31.07.13✎ 11:03 | 
        (0)[В SQL делала бы с помощью not exists. Но в 1С такого оператора нет ]
 есть | |||
| 5
    
        prishliemail 31.07.13✎ 11:07 | 
        (1) (2) (3) Спасибо! 
 (4) И как он называется? Так и писать not exists? | |||
| 6
    
        ДенисЧ 31.07.13✎ 11:14 | 
        (5) читай (3)     | |||
| 7
    
        Maxus43 31.07.13✎ 11:18 | 
        В = IN в скуле, не совсем то     | |||
| 8
    
        prishliemail 31.07.13✎ 11:19 | 
        (6) ну это больше на not in похоже     | |||
| 9
    
        prishliemail 31.07.13✎ 11:19 | 
        Вообщем я поняла) Всем спасибо!     | |||
| 10
    
        Ёпрст гуру 31.07.13✎ 11:20 | 
        (8) так и есть.
 Нет реализации exists в снеговике, которая гораздо быстрее работает чем in | |||
| 11
    
        Fragster модератор 31.07.13✎ 11:20 | 
        (7) (поле1,поле2) В (Выбрать траляля) преобразуется в EXISTS     | |||
| 12
    
        Maxus43 31.07.13✎ 11:22 | 
        (11) а просто Поле1 В (выбрать траляля) в IN?
 сервер 1с преобразует в exists только когда несколько полей, чего не поддерживает IN | |||
| 13
    
        Fragster модератор 31.07.13✎ 11:32 | 
        сейчас посмотрел в профайлер... интересно отражается реквизит ЭтоГруппа...
 CASE WHEN NOT _Reference79_Q_001_T_001._Folder = 0x01 THEN 0x01 WHEN _Reference79_Q_001_T_001._Folder = 0x01 THEN 0x00 END AS f_5 | |||
| 14
    
        ДенисЧ 31.07.13✎ 11:33 | 
        (13) не напутал?     | |||
| 15
    
        Maxus43 31.07.13✎ 11:39 | 
        (13) странно...     | |||
| 16
    
        Fragster модератор 31.07.13✎ 11:43 | 
        (14) неа...     | |||
| 17
    
        Fragster модератор 31.07.13✎ 11:43 | 
        кстати эксистс вызывается просто:
 ГДЕ (Номенклатура.Ссылка,Истина) В (ВЫБРАТЬ ТЗ.Ссылка,Истина ИЗ ТЗ) | |||
| 18
    
        Fragster модератор 31.07.13✎ 11:43 | 
        ВЫБРАТЬ
 Номенклатура.Ссылка, Номенклатура.ПометкаУдаления, Номенклатура.Предопределенный, Номенклатура.Родитель, Номенклатура.ЭтоГруппа, Номенклатура.Код, Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ (Номенклатура.Ссылка,Истина) В (ВЫБРАТЬ ТЗ.Ссылка,Истина ИЗ ТЗ) превращается в 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 0x01 WHEN _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
    
        Maxus43 31.07.13✎ 11:51 | 
        (18) Быстрей ли будет? На маленьких и больших объёмах вложенной выборки?     | |||
| 20
    
        Serginio1 31.07.13✎ 11:54 | 
        (13) Видно для сортировки флаг для групп 0, для элементов 1     | |||
| 21
    
        Fragster модератор 31.07.13✎ 11:54 | 
        (19) результат "не в"
 просто не в: 479 мс не в с отбором вложенного запроса: 485 мс (Номенклатура, Истина )не в: 478 мс надо посложнее что-то | |||
| 22
    
        Fragster модератор 31.07.13✎ 12:03 | 
        но вообще где много совпадений (заменил НЕ В на В, чтобы было больше) вариант (17) стабильно чуть быстрее, но надо смотреть в каждом случае.
 Для В внутреннее соединение быстрее, для "не в" - быстрее (поле,истина) чем левое и есть NULL, но все равно надо экспериментировать в каждом конкретном случае, ИМХО | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |