Имя: Пароль:
1C
 
Запрос между двух таблиц
0 illiona
 
naïve
02.07.24
05:00
Добрый день. Помогите написать запрос. Есть две таблицы , если удержание - исполнительный лист, то смотрим есть ли эта запись в первой таблице по ДокументОснование, если есть запись, то ее оставляем, если нет то она нам не нужна во второй таблице.

Мой запрос:
|ВЫБРАТЬ
    |    ВременнаяТаблицаИтог.ЗаданныйПериод КАК ЗаданныйПериод,
    |    ВременнаяТаблицаИтог.ДатаНачалаУдержания КАК ДатаНачалаУдержания,
    |    ВременнаяТаблицаИтог.ДатаОкончанияУдержания КАК ДатаОкончанияУдержания,
    |    ВременнаяТаблицаИтог.Организация КАК Организация,
    |    ВременнаяТаблицаИтог.Сотрудник КАК Сотрудник,
    |    ВременнаяТаблицаИтог.ФизическоеЛицо КАК ФизическоеЛицо,
    |    ВременнаяТаблицаИтог.Удержание КАК Удержание,
    |    ВременнаяТаблицаИтог.ДокументОснование КАК ДокументОснование,
    |    ВременнаяТаблицаИтог.Используется КАК Используется,
    |    ВременнаяТаблицаИтог.Значение КАК Значение,
    |    ВременнаяТаблицаИтог.УдержаниеПроцент КАК УдержаниеПроцент,
    |    ВременнаяТаблицаИтог.РазмерУдержания КАК РазмерУдержания,
    |    ВременнаяТаблицаИтог.ДокументУдержанияДата КАК ДокументУдержанияДата,
    |    ВременнаяТаблицаИтог.ДокументУдержанияНомер КАК ДокументУдержанияНомер,
    |    СТРОКА(ЕСТЬNULL(ВременнаяТаблицаУдержания.ВидРасчета.Наименование, """")) КАК УдержаниеНаименование,
    |    ЕСТЬNULL(ВременнаяТаблицаУдержания.ДокументОснование, """") КАК ДокументОснование1
    |ИЗ
    |    ВременнаяТаблицаИтог КАК ВременнаяТаблицаИтог
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаУдержания КАК ВременнаяТаблицаУдержания
    |        ПО (ВременнаяТаблицаИтог.ФизическоеЛицо = ВременнаяТаблицаУдержания.ФизическоеЛицо
    |            И ВременнаяТаблицаИтог.ДокументОснование = ВременнаяТаблицаУдержания.ДокументОснование)
    |ГДЕ
    |    Выбор КОГДА Строка(ВременнаяТаблицаИтог.Удержание.Наименование) = ""Удержание по исполнительному документу"" Тогда
    |        ЕСТЬNULL(ВременнаяТаблицаУдержания.ДокументОснование, """") <> """"
    |    Иначе ЕСТЬNULL(ВременнаяТаблицаУдержания.ДокументОснование, """") = """"
    |    Конец
4 Web00001
 
02.07.24
05:25
(0)>если есть запись, то ее оставляем, если нет то она нам не нужна во второй таблице
Предлагаю тебе, ответить(себе) на вопросы:
1. Оставляем где?
2. Что значит "она нам не нужна во второй таблице"?
3. Каким должен быть результат запроса? Какие колонки из каких таблиц должны получить в третьей таблице - результате запроса.

Ты не можешь изменить ни первую ни вторую таблицу. У тебя левое соединение к таблице "ВременнаяТаблицаИтог" значит в результат запроса попадут все записи из этой таблицы. Предлагаю тебе сначала понять, что ты хочешь получить на выходе в результате запроса, а не что ты хочешь "оставить во второй таблице". И если я тебя правильно понял, результатом запроса должны быть записи из таблицы "ВременнаяТаблицаИтог" у которой в поле "ДокументОснование" есть значения из таблицы "ВременнаяТаблицаУдержания" то тогда все верно тебе написали в условии должно быть либо: "НЕ ВременнаяТаблицаУдержания.ДокументОснование ЕСТЬ NULL" либо соединение должно быть внутренним.
5 illiona
 
naïve
02.07.24
05:34
В результате соединения двух таблиц должен быть результат
Если исполнительный лист есть в первой таблице, то в результате он должен вывестись, если его нет то не должен
6 illiona
 
naïve
02.07.24
05:38
(4) При внутреннем соединение или при НЕ ВременнаяТаблицаУдержания.ДокументОснование ЕСТЬ NULL в результате остается только одна запись по исполнительному листу, а погашение займа строка не отображается
9 Web00001
 
02.07.24
07:51
>Если исполнительный лист есть в первой таблице, то в результате он должен вывестись, если его нет то не должен
Тогда делать ничего не надо. Надо просто вывести поле с исполнительным листом из первой таблицы. Если там исполнительный лист есть, он выведется, если его там нет, то соответственно не выведется, его же там нет
10 Мультук
 
02.07.24
08:32
(0)

Вариант 1

Из таблицы  ВременнаяТаблицаИтог -- все записи
Из таблицы  ВременнаяТаблицаУдержания -- только записи для исполнительных листов

    |ИЗ
    |    ВременнаяТаблицаИтог КАК ВременнаяТаблицаИтог
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаУдержания КАК ВременнаяТаблицаУдержания
    |        ПО (ВременнаяТаблицаИтог.ФизическоеЛицо = ВременнаяТаблицаУдержания.ФизическоеЛицо
    |            И ВременнаяТаблицаИтог.ДокументОснование = ВременнаяТаблицаУдержания.ДокументОснование)
    |            И ВременнаяТаблицаИтог.Удержание.Наименование) = ""Удержание по исполнительному документу""
    |ГДЕ
    |     1 = 1


Вариант 2

Из таблицы  ВременнаяТаблицаИтог -- только записи по ""Удержание по исполнительному документу""
Из таблицы  ВременнаяТаблицаУдержания -- только записи для исполнительных листов

    |ИЗ
    |    ВременнаяТаблицаИтог КАК ВременнаяТаблицаИтог
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаУдержания КАК ВременнаяТаблицаУдержания
    |        ПО (ВременнаяТаблицаИтог.ФизическоеЛицо = ВременнаяТаблицаУдержания.ФизическоеЛицо
    |            И ВременнаяТаблицаИтог.ДокументОснование = ВременнаяТаблицаУдержания.ДокументОснование)
    |            
    |ГДЕ
    |    ВременнаяТаблицаИтог.Удержание.Наименование) = ""Удержание по исполнительному документу""
11 Web00001
 
02.07.24
07:55
(4)>результате остается только одна запись по исполнительному листу, а погашение займа строка не отображается
Значит эта строка не подходит под условие ВременнаяТаблицаУдержания.ДокументОснование ЕСТЬ NULL. Логично же?
12 Web00001
 
02.07.24
08:00
(10)>Из таблицы  ВременнаяТаблицаУдержания -- только записи для исполниительных листов
Будет соединение где должны совпасть физлица и документы основания, и в поле ВременнаяТаблицаУдержания.ДокументОснование будет null для документов которых нет в "ВременнаяТаблицаИтог.ДокументОснование", здесь, что не работает?
13 Мультук
 
02.07.24
08:30
(12)

1) Мне лень лезть в ЗУП и смотреть
правильные ли она написала соединения (документ. физ.лицо)
и могут ли быть дубли

2) Я пытаюсь "угадать" что хочет топкпастер

Пока она не родит вменяемый пример из трех табличек -- всё бесполезно.
Я перечитал сообщения еще раз и понял "что ничего не понял"
14 АгентБезопасной Нацио
 
02.07.24
09:01
(13) всё потому, что "кто ясно мыслит - тот ясно излагает". А когда даже тема называется "запрос МЕЖДУ двух таблиц", то ничего внятного ожидать не следует...
15 mikecool
 
02.07.24
09:19
(0) смотри до просветления
https://www.youtube.com/watch?v=nepj0RvohAw