Имя: Пароль:
1C
1С v8
Туплю с запросом. Как связать таблицы?
0 Lama12
 
03.03.16
13:14
Есть запрос (хотя таблицы в нем важнее)

ВЫБРАТЬ
    Проверяемые.А,
    Возможные.Ф
ИЗ
    (ВЫБРАТЬ
        "а" КАК А,
        1 КАК Б
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "а",
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "а",
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "в",
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "в",
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "г",
        1
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "г",
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "г",
        3) КАК Проверяемые,
    (ВЫБРАТЬ
        1 КАК Ф
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        3) КАК Возможные


Нужно что б в результате получилась таблица:

а 2
в 1

Фактически в таблице "Проверяемые" должны быть записи типа
А Б
а 1
а 2
а 3

В таблице "Возможные" всё множество значений которые могут быть в поле "Б" таблицы "Проверяемые".
Нужно выбрать значения поля "А" из таблицы "Проверяемые", для которых отсутствует хотя бы одно сочетание из всех возможных с таблицей "Возможные". В результат вывести комбинации значений поля "А" таблицы "Проверяемые", со значениями из таблицы "Возможные", которых нет в таблице "Проверяемые".

Написал как смог. Пример ИМХО нагляднее :)
Как связать таблицы? Туплю второй день... Скорее всего решение простое...поэтому и туплю...
1 LordCMEPTb
 
03.03.16
13:31
На самом решение простое: идея в том, чтобы сначала создать таблицу со всеми возможными комбинациями А и Ф, а затем сравнить её с проверяемой.

ВЫБРАТЬ
    1 КАК Ф
ПОМЕСТИТЬ ВТ_Возможные

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "а" КАК А,
    1 КАК Б
ПОМЕСТИТЬ ВТ_Проверяемые

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "а",
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "а",
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "в",
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "в",
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "г",
    1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "г",
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "г",
    3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Разные_А_Проверяемые.А,
    ВТ_Возможные.Ф
ПОМЕСТИТЬ ВТ_ВсеВозможные
ИЗ
    ВТ_Возможные КАК ВТ_Возможные
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
            ВТ_Проверяемые.А КАК А
        ИЗ
            ВТ_Проверяемые КАК ВТ_Проверяемые) КАК Разные_А_Проверяемые
        ПО (ИСТИНА)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ВсеВозможные.А,
    ВТ_ВсеВозможные.Ф
ИЗ
    ВТ_ВсеВозможные КАК ВТ_ВсеВозможные
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Проверяемые КАК ВТ_Проверяемые
        ПО ВТ_ВсеВозможные.А = ВТ_Проверяемые.А
            И ВТ_ВсеВозможные.Ф = ВТ_Проверяемые.Б
ГДЕ
    ВТ_Проверяемые.А ЕСТЬ NULL
2 LordCMEPTb
 
03.03.16
13:32
ОФФ: все же классно порой работает анализатор "кода" на форуме...
3 Lama12
 
03.03.16
13:33
(1) Хы... пока писал сообщение промелькнула подобная мысль, но реализовать не успел. Спасибо!
4 LordCMEPTb
 
03.03.16
13:35
(3) Правильно сформулированный вопрос - половина решения задачи.
AdBlock убивает бесплатный контент. 1Сергей