8.х Запрос с условием не в списке

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем OXED, 4 июн 2014.

  1. TopicStarter Overlay
    OXED
    Offline

    OXED Опытный в 1С

    Регистрация:
    10 апр 2012
    Сообщения:
    256
    Симпатии:
    0
    Баллы:
    26
    Добрый день. Простейшая (по идее) задача, но у меня тут ступор.

    Есть таблица1, в ней 100 записей. Есть таблица2, в ней 5 записей. Необходимо получить в итоге 95 записей из таблицы1, которые отсутствуют в таблице2.

    Я смог сделать только вот так:
    Код:
    ВЫБРАТЬ
        ВложенныйЗапрос.Справочник
    ИЗ
        (ВЫБРАТЬ
            ВЫБОР
                КОГДА Партнеры.Ссылка = ИерархияПартнеров.Партнер.Ссылка
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ КАК Поле1,
            Партнеры.Ссылка КАК Справочник,
            ИерархияПартнеров.Партнер.Ссылка КАК Регистр
        ИЗ
            РегистрСведений.ИерархияПартнеров КАК ИерархияПартнеров
                ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
                ПО ИерархияПартнеров.Партнер = Партнеры.Ссылка) КАК ВложенныйЗапрос
    ГДЕ
        ВложенныйЗапрос.Поле1 = 0
    Но это дичайшее извращение.
    Пробовал сделать просто с условием НЕ В (таблица2), но в результате пустая таблица с 0 записей.

    Подскажите пожалуйста как оптимальнее можно выйти из положения?
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Внешнее соединение в запросе
  3. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    IMHO
    Код:
    ВЫБРАТЬ
        Партнеры.Ссылка                КАК Справочник,
        ИерархияПартнеров.Партнер    КАК Регистр // уже ссылка
    ИЗ
        Справочник.Партнеры КАК Партнеры  // таблица 100 записей
        ЛЕВОЕ СОЕДИНЕНИЕ
            РегистрСведений.ИерархияПартнеров КАК ИерархияПартнеров // таблица 5 записей
        ПО ИерархияПартнеров.Партнер = Партнеры.Ссылка
    ГДЕ
        ИерархияПартнеров.Партнер ЕСТЬ НЕ NULL // соединение удалось, запись исключаем
    JohnConnor, nickvv и OXED нравится это.
  4. TopicStarter Overlay
    OXED
    Offline

    OXED Опытный в 1С

    Регистрация:
    10 апр 2012
    Сообщения:
    256
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое. Вопрос решен
    Только тут:
    Код:
    ГДЕ
        ИерархияПартнеров.Партнер ЕСТЬ НЕ NULL // соединение удалось, запись исключаем
    Без "не" нужно было.

Поделиться этой страницей