Имя: Пароль:
1C
1С v8
Второй час, после выходных, туплю с запросом.
🠗 (Волшебник 19.04.2021 13:10)
,
0 Lama12
 
19.04.21
13:08
Есть таблица
Имя-------------Буква
"Первый"--------"А"
"Первый"--------"Б"
"Второй"--------"В"

Вторая таблица
Буква
"А"
"Б"
"В"
"Г"

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

Результирующая таблица

Имя-------------Буква
"Первый"--------"В"
"Первый"--------"Г"
"Второй"--------"А"
"Второй"--------"Б"
"Второй"--------"Г"

Чувствую что должно быть, что-то примитивное, но не могу вспомнить как раньше делал. :-(

На всякий случай текст запроса с таблицами из примера


ВЫБРАТЬ
    Таблица1.Имя,
    Таблица1.Буква
ИЗ
    (ВЫБРАТЬ
        "Первый" КАК Имя,
        "А" КАК Буква
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Первый",
        "Б"
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Второй",
        "В") КАК Таблица1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            "А" КАК Буква
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            "Б"
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            "В"
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            "Г") КАК Таблица2
        ПО Таблица1.Буква = Таблица2.Буква

1 DTX 4th
 
19.04.21
13:11
Внутреннее соединение по Буква <> Буква?
2 Волшебник
 
19.04.21
13:13
ВЫБРАТЬ Имя
ГДЕ НЕ Буква В (ВЫБРАТЬ Буква ИЗ ВтораяТаблица)
3 Lama12
 
19.04.21
13:21
(2) Не будет работать. Будет пустой результат.
4 DTX 4th
 
19.04.21
13:23
(1) + Группировка
5 Lama12
 
19.04.21
13:26
(4) Сделал с временными таблицами. Тоже ерунда выходит.

ВЫБРАТЬ
    "Первый" КАК Имя,
    "А" КАК Буква
ПОМЕСТИТЬ Таблица1

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

ВЫБРАТЬ
    "Первый",
    "Б"

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

ВЫБРАТЬ
    "Второй",
    "В"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "А" КАК Буква
ПОМЕСТИТЬ Таблица2

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

ВЫБРАТЬ
    "Б"

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

ВЫБРАТЬ
    "В"

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

ВЫБРАТЬ
    "Г"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таблица1.Имя КАК Имя,
    Таблица2.Буква КАК Буква
ИЗ
    Таблица1 КАК Таблица1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
        ПО Таблица1.Буква <> Таблица2.Буква

СГРУППИРОВАТЬ ПО
    Таблица1.Имя,
    Таблица2.Буква

УПОРЯДОЧИТЬ ПО
    Имя,
    Буква
6 Lama12
 
19.04.21
13:28
Стоп. В результирующей таблице первая запись лишняя.
Должно быть так.

Имя-------------Буква
"Первый"--------"Г"
"Второй"--------"А"
"Второй"--------"Б"
"Второй"--------"Г"
7 Kassern
 
19.04.21
13:31
(0) Можешь по рабоче-крестьянски сделать. Соединяешь вместе 2 таблицы, у тебя будет 3 колонки (Имя, БукваПервойКолонки, БукваВторойКолонки). А далее в результирующей колонке делаешь отбор БукваПервойКолонки<>БукваВторойКолонки.
8 Lama12
 
19.04.21
13:32
Вот когда опишешь вопрос, и решение получается. :-)

Вот получилось. Кривовато конечно, но работает.

Всем спасибо.


ВЫБРАТЬ
    "Первый" КАК Имя,
    "А" КАК Буква
ПОМЕСТИТЬ Таблица1

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

ВЫБРАТЬ
    "Первый",
    "Б"

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

ВЫБРАТЬ
    "Второй",
    "В"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "А" КАК Буква
ПОМЕСТИТЬ Таблица2

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

ВЫБРАТЬ
    "Б"

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

ВЫБРАТЬ
    "В"

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

ВЫБРАТЬ
    "Г"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таблица1.Имя КАК Имя,
    Таблица2.Буква КАК Буква
ПОМЕСТИТЬ ВсеСвязи
ИЗ
    Таблица1 КАК Таблица1,
    Таблица2 КАК Таблица2

СГРУППИРОВАТЬ ПО
    Таблица1.Имя,
    Таблица2.Буква
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВсеСвязи.Имя,
    ВсеСвязи.Буква
ИЗ
    ВсеСвязи КАК ВсеСвязи
        ЛЕВОЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
        ПО ВсеСвязи.Имя = Таблица1.Имя
            И ВсеСвязи.Буква = Таблица1.Буква
ГДЕ
    Таблица1.Имя ЕСТЬ NULL
9 Почему 1С
 
19.04.21
14:14
(8) интересно можно ли решить без декартова произведения?
10 Почему 1С
 
19.04.21
14:40
(6) Почему Первый В нет, но Второй А,Б есть, странная логика
По моему задача выглядела бы логичнее если бы
Первый В была в результате
11 Lama12
 
19.04.21
15:03
(10) Да, это я уже затупил.
12 Lama12
 
19.04.21
15:04
(9) Мне тоже интересно, но поскольку задачка разовая, то и так сойдет. Благо это не в проведение документа нужно :-)
13 Почему 1С
 
19.04.21
15:26
(12) Задачка интересная, мне понравилась. Можно на собеседованиях задавать.
Декартово соединение можно заменить на внутреннее, результат тот же.

ВЫБРАТЬ
    Таблица1.Имя,
    Таблица2.Буква КАК Буква
ПОМЕСТИТЬ ВсеСвязи
ИЗ
    Таблица1 КАК Таблица1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
        ПО Таблица1.Буква <> Таблица2.Буква

СГРУППИРОВАТЬ ПО
    Таблица1.Имя,
    Таблица2.Буква
14 Lama12
 
19.04.21
15:36
(13) Спасибо. Так лучше будет.