Имя: Пароль:
1C
 
Вычитание таблиц в запросе
0 Feofan
 
22.05.09
15:09
Прошу совета.
Имею 2 вложенных запроса, каждый возвращает таблицу данных с 2-мя одинаковыми полями (1-й  возвращает все множество записей, 2-й - его подмножество). Нужно получить те записи из таблицы 1, которые отсутствуют в таблице 2. Вроде бы просто, а что-то никак. Левое соединение через <> виснет, через = работает, но возвращает естественно 2-ю таблицу.. На всякий случай вот запрос:

ВЫБРАТЬ
    Существующие.Номенклатура КАК Номенклатура,
    Существующие.ТипЦен
ИЗ
    (ВЫБРАТЬ
         ТипыЦенНоменклатуры.Ссылка КАК ТипЦен,
         ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
    ИЗ
         Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
              ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
              ПО (ИСТИНА)
    ГДЕ
         ТоварыНаСкладахОстатки.КоличествоОстаток <> 0) КАК ВсеВозможные
         ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
              ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
              ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен
         ИЗ
              РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                   ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
         ГДЕ
              ТоварыНаСкладахОстатки.КоличествоОстаток <> 0) КАК Существующие
         ПО (ВсеВозможные.Номенклатура <> Существующие.Номенклатура
                   И ВсеВозможные.ТипЦен <> Существующие.ТипЦен)

УПОРЯДОЧИТЬ ПО
    Номенклатура


Смысл его - определить, по каким позициям номенклатуры какие типы цен отсутствуют в РС ЦеныНоменклатуры
1 IronDemon
 
22.05.09
15:11
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Номенклатура.Представление
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   (НЕ Номенклатура.Ссылка В
               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   ЦеныНоменклатурыСрезПоследних.Номенклатура
               ИЗ
                   РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних))
2 Ненавижу 1С
 
гуру
22.05.09
15:15
ВЫБРАТЬ Запрос.Х
ИЗ ЗапросА
ЛЕВОЕ СОЕДИНЕНИЕ ЗапросБ ПО (ЗапросА.Х=ЗапросБ.Х)
ГДЕ ЗапросБ.Х ЕСТЬ NULL
3 Feofan
 
22.05.09
15:24
(1) Нужно знать какие именно типы цен отсутствуют - может быть например по 3-м типам заведены записи, по 2-м нет. Вот эти 2 и нужно вывести
4 Feofan
 
22.05.09
15:31
Разобрался, (2) натолкнул на правильную мысль. Всем спасибо, вот получившийся запрос:

ВЫБРАТЬ
   ВсеВозможные.ТипЦен КАК ТипЦенВСЕ,
   ВсеВозможные.Номенклатура КАК НоменклатураВСЕ
ИЗ
   (ВЫБРАТЬ
       ТипыЦенНоменклатуры.Ссылка КАК ТипЦен,
       ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
   ИЗ
       Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
           ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
           ПО (ИСТИНА)
   ГДЕ
       ТоварыНаСкладахОстатки.КоличествоОстаток <> 0) КАК ВсеВозможные
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
           ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен
       ИЗ
           РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
               ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
               ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
       ГДЕ
           ТоварыНаСкладахОстатки.КоличествоОстаток <> 0) КАК Существующие
       ПО ВсеВозможные.Номенклатура = Существующие.Номенклатура
           И ВсеВозможные.ТипЦен = Существующие.ТипЦен
ГДЕ
   Существующие.ТипЦен ЕСТЬ NULL

УПОРЯДОЧИТЬ ПО
   НоменклатураВСЕ