Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Проверка на NULL в запросе

Проверка на NULL в запросе
Я
   Dmitri446
 
30.11.17 - 22:15
Помогите добавить проверки на null, не могу допереть как ее сделать, точнее что вместо null выводить если он есть

ВЫБРАТЬ
    |    КонтактныеЛица.Владелец КАК Владелец,
    |    ВЫБОР
    |        КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.РабочиеМеста.ПустаяСсылка)
    |            ТОГДА КонтактныеЛица.РабМесто
    |        ИНАЧЕ Сотрудники.РабочееМесто
    |    КОНЕЦ КАК РабочееМесто
    |ИЗ
    |    Справочник.КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    (Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |            ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка)
 
 
   hhhh
 
1 - 30.11.17 - 22:22
(0) используй ЕСТЬNULL
   jsmith82
 
2 - 30.11.17 - 22:26
ЕСТЬNULL(КонтактныеЛица.РабМесто, Сотрудники.РабочееМесто)
   Мисти
 
3 - 30.11.17 - 23:19
»
   Лефмихалыч
 
4 - 30.11.17 - 23:21
во-первых, "ПОЛНОЕ" замени на "ВНУТРЕННЕЕ"
во-вторых, в данном случае не может у тебя запрос NULL вернуть как раз потому, что соединение в любом случае внутреннее
   Лефмихалыч
 
5 - 30.11.17 - 23:22
»
   vi0
 
6 - 01.12.17 - 05:46
(0) а что ты хочешь в результате?
какую задачу решаешь?
   pasha_d
 
7 - 01.12.17 - 10:16
хочешь Null - используй левое соединение
   dezss
 
8 - 01.12.17 - 11:02
(7) с фига ли?
при полном как раз будут null`ы.
   HEKPOH
 
9 - 01.12.17 - 11:03
(8) и при полном, и при левом, и при правом
   Ненавижу 1С
 
10 - 01.12.17 - 11:04
(9) иногда NULL бывает вообще в одной таблице без соединений
 
 Рекламное место пустует
   Ц_У
 
11 - 01.12.17 - 11:07
(3) переведу (5) 
у вас профиль скучный :)
   hhhh
 
12 - 01.12.17 - 11:09
(8) имеется в виду, что при условии

 |ГДЕ
    |    (Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |            ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка)

не будет null
   dezss
 
13 - 01.12.17 - 11:13
(12) а если полное переписать на левое, то типа будут?)))

При таком условии будут null`ы, если в одном из справочников нет ссылки на это физ. лицо.
   dezss
 
14 - 01.12.17 - 11:15
(13) + кстати, КонтактныеЛица.Владелец тоже может быть null`ом)
   hhhh
 
15 - 01.12.17 - 11:17
(13) null-ов не будет, они отбросятся при выполнении условия в ГДЕ. Об этом и говорит (4)
   Buster007
 
16 - 01.12.17 - 11:19
(3) это потому, что у тебя фотки нет )
   dezss
 
17 - 01.12.17 - 11:19
(15) и куда ж они отбросятся при соединении?
что будет в КонтактныеЛица.Владелец, если КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка будет ложью?
   Dmitrii
 
18 - 01.12.17 - 11:21
(15) >> null-ов не будет, они отбросятся 

Перечитай еще раз запрос.
Ничего там не отбросится
   hhhh
 
19 - 01.12.17 - 11:21
(17) этой строчки вообще не будет, она не пройдет через ГДЕ
   hhhh
 
20 - 01.12.17 - 11:22
(18) всё отбросится, это следует из аксиомы

Х ИЛИ NULL = ЛОЖЬ
   dezss
 
21 - 01.12.17 - 11:23
(19) т.е. ты хочешь сказать, что КонтактныеЛица.Владелец, который описан после ВЫБРАТЬ не будет присутствовать в результате запроса? О_о

мда...пятница, кому-то пора отдохнуть)))
   dezss
 
22 - 01.12.17 - 11:23
(20) е-мое....
т.е. ты хочешь сказать, что условие КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка вернет Null? О_О
   undertaker
 
23 - 01.12.17 - 11:24
(11) а у Dmitri446 он не скучный? о_О
   dezss
 
24 - 01.12.17 - 11:26
(23) ОФФ: он мужик...кто будет просить фотку у мужика)))
   Dmitrii
 
25 - 01.12.17 - 11:27
(4) >> во-первых, "ПОЛНОЕ" замени на "ВНУТРЕННЕЕ"

Сильно сомневаюсь, что тут нужно ВНУТРЕННЕЕ соединение.
Скорее всего, ЛЕВОЕ. Но оно не избавит от NULL.
   dezss
 
26 - 01.12.17 - 11:28
(25) а разве в постановке вопроса была задача избавиться от null`а?
вроде ж спросили только про проверку и в (1) и (2) получили ответ на вопрос
   Dmitri446
 
27 - 01.12.17 - 11:28
Переделал под левое, но с NULL до сих пор чет не врублюсь

ВЫБРАТЬ
    |    ЕСТЬNULL(КонтактныеЛица.Владелец, ЗНАЧЕНИЕ(Справочник.ИТ_КонтактныеЛица.ПустаяСсылка)) КАК Владелец,
    |    ВЫБОР
    |        КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
    |            ТОГДА КонтактныеЛица.РабМесто
    |        ИНАЧЕ Сотрудники.РабочееМесто
    |    КОНЕЦ КАК РабочееМесто
    |ИЗ
    |    Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |    И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    |    КонтактныеЛица.Владелец,
    |    ВЫБОР
    |        КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
    |            ТОГДА КонтактныеЛица.РабМесто
    |        ИНАЧЕ Сотрудники.РабочееМесто
    |    КОНЕЦ
    |ИЗ
    |    Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка
    |    И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
   dezss
 
28 - 01.12.17 - 11:30
(27) в чем конкретно косяк?
какие тебя не устраивают данные?
   Dmitrii
 
29 - 01.12.17 - 11:32
(27) >> Переделал под левое

Где? В запросе везде ПОЛНОЕ.

У тебя каша в голове.
Скажу уже наконец - что тебе именно надо.
   hhhh
 
30 - 01.12.17 - 11:32
(27) так может
   |ГДЕ
    |    Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |    И НЕ КонтактныеЛица.ФизЛицо ЕСТЬ NULL
   Ненавижу 1С
 
31 - 01.12.17 - 11:33
(27)

 Сотрудники.ФизЛицо.Ссылка = &Ссылка
И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL

это ПЯТНИЦА!
   Dmitri446
 
32 - 01.12.17 - 11:33
Не тот код скинул...

В общем мне нужно при выборе физ лица если у него есть контактное лицо выбрать раб место контактного лица, если контактного лица нету то выбрать рабочее место сотрудника и наоборот
   Ц_У
 
33 - 01.12.17 - 11:34
(23) от пола зависит
 
 
   Dmitri446
 
34 - 01.12.17 - 11:34
ВЫБРАТЬ
        КонтактныеЛица.Владелец,
        ВЫБОР
            КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
                ТОГДА КонтактныеЛица.РабМесто
            ИНАЧЕ Сотрудники.РабочееМесто
        КОНЕЦ КАК РабочееМесто
    ИЗ
        Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
            ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    ГДЕ
        Сотрудники.ФизЛицо.Ссылка = &Ссылка
        И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        КонтактныеЛица.Владелец,
        ВЫБОР
            КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
                ТОГДА КонтактныеЛица.РабМесто
            ИНАЧЕ Сотрудники.РабочееМесто
        КОНЕЦ
    ИЗ
        Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
            ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    ГДЕ
        КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка
        И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
   hhhh
 
35 - 01.12.17 - 11:35
(29) условие в ГДЕ

  |ГДЕ
    |    (Сотрудники.ФизЛицо.Ссылка = &Ссылка

вревращает ПОЛНОЕ СОЕДИНЕНИЕ в ЛЕВОЕ

идем дальше, вторая строчка

  |            ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка)

превращает ЛЕВОЕ СОЕДИНЕНИЕ во ВНУТРЕННЕЕ.

то есть в запросе (0) фактически внутреннее соединение   ????
   dezss
 
36 - 01.12.17 - 11:42
(35) Не совсем так. Не забывай, тут ИЛИ, а не И. Если было бы И, то ты был бы прав.

Вместо
       ВЫБОР
            КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
                ТОГДА КонтактныеЛица.РабМесто
            ИНАЧЕ Сотрудники.РабочееМесто
        КОНЕЦ

Напиши
ЕстьNull(КонтактныеЛица.РабМесто,Сотрудники.РабочееМесто).
Но если оба будут null, то тут тоже будет null.
И, кстати ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка) <> Null, запомни это очень хорошо!!!
   dezss
 
37 - 01.12.17 - 11:44
(36) Вторая часть, которая после "Вместо..." для (34)
   Dmitrii
 
38 - 01.12.17 - 11:45
(35) Если бы тыл прав, то проблемы в (0) не было бы.

А если вникнуть в текст условия ГДЕ, то ты увидишь там "ИЛИ". То есть никакого превращение во ВНУТРЕННЕЕ соединение не произойдёт.
   dezss
 
39 - 01.12.17 - 11:47
(0) Блин, проще написать, чем объяснить ТС-у...может сам разберется)))
    |ВЫБРАТЬ
    |    ЕСТЬNULL(КонтактныеЛица.Владелец, ЗНАЧЕНИЕ(Справочник.ИТ_КонтактныеЛица.ПустаяСсылка)) КАК Владелец,
    |    ЕстьNull(КонтактныеЛица.РабМесто,Сотрудники.РабочееМесто) КАК РабочееМесто
    |ИЗ
    |    Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |    ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка
   MaxS
 
40 - 01.12.17 - 12:09
Зачем нужны эти ФизЛицо.Ссылка = &Ссылка ?
почему не ФизЛицо = &Ссылка ?
   dezss
 
41 - 01.12.17 - 12:13
(40) нафиг не нужны...я просто копипастил из запроса тс
   МимохожийОднако
 
42 - 01.12.17 - 12:20
(3) ОФФ: Правда матку режет.


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