Имя: Пароль:
1C
1С v8
Левое соединение с вложенным запросом. Не пойму, как работает...
0 bvn-2005
 
19.12.19
15:30
ТАкой запрос:

ВЫБРАТЬ
    Сотрудники.Код КАК Код,
    Сотрудники.Наименование КАК Наименование,
    ВложенныйЗапрос.ВидОбразования КАК ВидОбразования,
    ВложенныйЗапрос.УчебноеЗаведение КАК УчебноеЗаведение
ИЗ
    Справочник.Сотрудники КАК Сотрудники
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
            ОбразованиеФизическихЛиц.Владелец КАК Владелец,
            ОбразованиеФизическихЛиц.ВидОбразования КАК ВидОбразования,
            ОбразованиеФизическихЛиц.УчебноеЗаведение КАК УчебноеЗаведение,
            ОбразованиеФизическихЛиц.Ссылка КАК Ссылка
        ИЗ
            Справочник.ОбразованиеФизическихЛиц КАК ОбразованиеФизическихЛиц
        
        УПОРЯДОЧИТЬ ПО
            Ссылка) КАК ВложенныйЗапрос
        ПО Сотрудники.ФизическоеЛицо.Ссылка = ВложенныйЗапрос.Владелец.Ссылка
ГДЕ
    Сотрудники.Код = &Код

Для одного сотрудника все нормально, а для другого возвращает ВидОбразования и УчебноеЗаведение NULL. Хотя данные точно есть...
1 dka80
 
19.12.19
15:31
ВЫБРАТЬ ПЕРВЫЕ 1 - вернет какую-то одну случайную запись из базы, вообще никак не связанную с основным запросом
2 pechkin
 
19.12.19
15:31
где то во вложенном запросе пропущен фильтр по физлицу
3 Широкий
 
19.12.19
15:32
С чего ты решил что первая запись во вложенном это именно твой сотрудник :)
4 pechkin
 
19.12.19
15:32
(2) хотя нет - код вообще полное г.
5 lodger
 
19.12.19
15:33
(1) видимо, там есть люди с более чем 1 образованием и список двоился.
решили через "Первые 1". неправильно.
6 bvn-2005
 
19.12.19
15:36
"видимо, там есть люди с более чем 1 образованием и список двоился"
Именно так. А как правильно?
7 dka80
 
19.12.19
15:37
(6) разные способы есть. Например, можешь Группировки использовать, если приоритет не важен.
8 kda26
 
19.12.19
15:40
левое соединение с условием становиться внутренним соединением
9 Престарелый Заяц
 
19.12.19
15:41
(1) С чего ты взял, что он вернет случайную запись???
10 dka80
 
19.12.19
15:45
(9) ты можешь гарантировать, что сейчас тебе вернулось Номенклатура1 и через час или через день вернется также Номенклатура1?
11 НЕА123
 
19.12.19
15:48
ВЫБРАТЬ  ПЕРВЫЕ 1
    Сотрудники.Код КАК Код,
    Сотрудники.Наименование КАК Наименование,
    ОбразованиеФизическихЛиц .ВидОбразования КАК ВидОбразования,
    ОбразованиеФизическихЛиц .УчебноеЗаведение КАК УчебноеЗаведение
ИЗ
    Справочник.Сотрудники КАК Сотрудники
        ЛЕВОЕ СОЕДИНЕНИЕ   Справочник.ОбразованиеФизическихЛиц КАК ОбразованиеФизическихЛиц
        

        ПО Сотрудники.ФизическоеЛицо.Ссылка = ОбразованиеФизическихЛиц .Владелец.Ссылка
ГДЕ
    Сотрудники.Код = &Код
12 НЕА123
 
19.12.19
15:49
*
.Ссылка убрать.
13 Престарелый Заяц
 
19.12.19
15:59
(10) А кто может такое гарантировать если данные меняются? В подзапросе ВСЕГДА вернется первая ссылка, согласно правил сортировки ссылок, при чем тут номенклатура вообще?
14 aleks_default
 
19.12.19
16:03
Внутри вложенного запроса нужно просто сделать фильтр по физлицу
15 НЕА123
 
19.12.19
16:05
(14)
+ его только и оставить безо всяких там СОЕДИНЕНИЕ.
16 aleks_default
 
19.12.19
16:06
Но ито таким образом вы просто получите то образование, которое было заведено для этого сотрудника раньше всех
17 aleks_default
 
19.12.19
16:07
(15)+1
18 aleks_default
 
19.12.19
16:10
(16) Имеется ввиду, если у одного сотрудника заведено несколько образований, т. е. несколько элементов справочника Образования физ лиц, то вы получите таким образом тот элемент из них, который был создан первым
19 dot05
 
19.12.19
16:13
божечки
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.