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


1С:Предприятие ::

Метки: 

Левое соединение РС

Я
   Klesk
 
15.03.18 - 10:27
вот пример с итс:
https://its.1c.ru/db/v838doc#bookmark:dev:TI000000471

Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Пишу:
ВЫБРАТЬ
    АдресныеОбъектыСубъектРФ.Наименование КАК СубъектРФ,
    АдресныеОбъектыРайон.Наименование КАК Район
ИЗ
    РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыСубъектРФ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРайон
        ПО АдресныеОбъектыСубъектРФ.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ
ГДЕ
    АдресныеОбъектыРайон.Актуален
    И АдресныеОбъектыСубъектРФ.Актуален
    И АдресныеОбъектыРайон.Уровень = 3
    И АдресныеОбъектыСубъектРФ.Уровень = 1

и Санет-Петербург не попадает, так как районов у него нет, но должен был по идее с NULL попасть, нет?
 
  Рекламное место пустует
   singlych
 
1 - 15.03.18 - 10:32
У тебя отбор по полям правой таблицы. А они NULL и в отбор не попадают.
   catena
 
2 - 15.03.18 - 10:33
АдресныеОбъектыРайон.Актуален - NULL не удовлетворяет, прикинь
   Dolter
 
3 - 15.03.18 - 10:34
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРайон
        ПО АдресныеОбъектыСубъектРФ.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ
И АдресныеОбъектыРайон.Актуален = ИСТИНА
    И АдресныеОбъектыСубъектРФ.Актуален = ИСТИНА
    И АдресныеОбъектыРайон.Уровень = 3
    И АдресныеОбъектыСубъектРФ.Уровень = 1
   Klesk
 
4 - 15.03.18 - 10:37
(3) не помогло

(1) (2) а как можно решить - загонять в 2 временные таблицы и потом объединять?
   catena
 
5 - 15.03.18 - 10:39
(4)>>а как можно решить
Никогда не ставить условия на левую таблицу. Никогда. Потому что от этого она перестает быть левой.

Все условия должны быть в соединениях. Или в параметрах. Или наложены на отдельную выборку.
   Dolter
 
6 - 15.03.18 - 10:39
сори, условия по АдресныеОбъектыРайон в условия соединения, а по АдресныеОбъектыСубъектРФ в "где"
   catena
 
7 - 15.03.18 - 10:41
Не, ну как вариаааант, если совсем жить не можешь без условий, тогда так:

ГДЕ
    ЕстьNULL(АдресныеОбъектыРайон.Актуален,Истина)
    И АдресныеОбъектыСубъектРФ.Актуален
    И ЕстьNULL(АдресныеОбъектыРайон.Уровень,3) = 3
    И АдресныеОбъектыСубъектРФ.Уровень = 1
   Klesk
 
8 - 15.03.18 - 11:14
спасибо за науку
   Малыш Джон
 
9 - 15.03.18 - 11:36
в данном случае - действительно лучше в условия связи таблиц перенести
   Klesk
 
10 - 16.03.18 - 17:42
А подскажите по ПОЛНОМУ соединению, почему слева попадают записи с АдресныеОбъектыГорода.Уровень=1

ВЫБРАТЬ
    АдресныеОбъектыУлицы.Наименование,
    АдресныеОбъектыУлицы.Сокращение,
    АдресныеОбъектыУлицы.Уровень,
    АдресныеОбъектыГорода.Наименование КАК Наименование1,
    АдресныеОбъектыГорода.Сокращение КАК Сокращение1,
    АдресныеОбъектыГорода.Уровень КАК Уровень1
ИЗ
    РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыГорода
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлицы
        ПО (АдресныеОбъектыУлицы.КодСубъектаРФ = АдресныеОбъектыГорода.КодСубъектаРФ)
            И (АдресныеОбъектыУлицы.Уровень = 7)
            И (АдресныеОбъектыГорода.Уровень = 4)
            И (АдресныеОбъектыУлицы.Актуален)
            И (АдресныеОбъектыГорода.Актуален)
 
  Рекламное место пустует
   mehfk
 
11 - 16.03.18 - 17:56
   PC
 
12 - 16.03.18 - 18:07
(0) У меня все соединения правые. :)
   Klesk
 
13 - 16.03.18 - 19:23
(11) вроде понял
а как правильно сделать?, через временные таблицы с ГДЕ, а потом соединять?
   mehfk
 
14 - 16.03.18 - 20:30
(13) Не знаю, что ты хочешь, но предположу:
Прямо в этот запрос:
WHERE ISNULL(АдресныеОбъектыГорода.Уровень,1)=1
   mehfk
 
15 - 16.03.18 - 20:31
ну и подставь вместо единиц то что нужно
   Klesk
 
16 - 16.03.18 - 21:31
хочу что то типа:

7    null
7    null
7    4
7    4
null 4
null 4
null 4
   Fram
 
17 - 17.03.18 - 00:02
(16) из запроса в (10) такой результат и должен быть
   Klesk
 
18 - 17.03.18 - 00:11
   Fram
 
19 - 17.03.18 - 00:37
(18) кто то где то врет. результат однозначно не соответствует  запросу
   triviumfan
 
20 - 17.03.18 - 10:43
А зачем здесь соединение не пойму.
   Туц
 
21 - 17.03.18 - 12:42
(16) Это полное соединение.
   Туц
 
22 - 17.03.18 - 12:46
select a.aa 

into #T1

from (
select 1 aa
union all select 2
union all select 3
union all select 4) a


select a.aa 

into #T2

from (
select 2 aa
union all select 3
union all select 4
union all select 5) a

select t1.aa,t2.aa
from #t1 T1
FULL OUTER JOIN #T2 T2 ON T1.aa=t2.aa


aa    aa
1    NULL
2    2
3    3
4    4
NULL    5



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