Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Второй час, после выходных, туплю с запросом.

↓ [Волшебник, 19.04.21 - 13:10]
Второй час, после выходных, туплю с запросом.
Я
   Lama12
 
19.04.21 - 13:08
Есть таблица
Имя-------------Буква
"Первый"--------"А"
"Первый"--------"Б"
"Второй"--------"В"

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

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

Результирующая таблица
Имя-------------Буква
"Первый"--------"В"
"Первый"--------"Г"
"Второй"--------"А"
"Второй"--------"Б"
"Второй"--------"Г"

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

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

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


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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

ВЫБРАТЬ
    "Б"

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

ВЫБРАТЬ
    "В"

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

ВЫБРАТЬ
    "Г"
;

////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

ВЫБРАТЬ
    "Б"

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

ВЫБРАТЬ
    "В"

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

ВЫБРАТЬ
    "Г"
;

////////////////////////////////////////////////////////////////////////////////

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

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВсеСвязи.Имя,
    ВсеСвязи.Буква
ИЗ
    ВсеСвязи КАК ВсеСвязи
        ЛЕВОЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
        ПО ВсеСвязи.Имя = Таблица1.Имя
            И ВсеСвязи.Буква = Таблица1.Буква
ГДЕ
    Таблица1.Имя ЕСТЬ NULL

   Почему 1С
 
9 - 19.04.21 - 14:14
(8) интересно можно ли решить без декартова произведения?
   Почему 1С
 
10 - 19.04.21 - 14:40
(6) Почему Первый В нет, но Второй А,Б есть, странная логика
По моему задача выглядела бы логичнее если бы 
Первый В была в результате
   Lama12
 
11 - 19.04.21 - 15:03
(10) Да, это я уже затупил.
   Lama12
 
12 - 19.04.21 - 15:04
(9) Мне тоже интересно, но поскольку задачка разовая, то и так сойдет. Благо это не в проведение документа нужно :-)
   Почему 1С
 
13 - 19.04.21 - 15:26
(12) Задачка интересная, мне понравилась. Можно на собеседованиях задавать.
Декартово соединение можно заменить на внутреннее, результат тот же.

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.