Имя: Пароль:
1C
 
Левое соединение РС
,
0 Klesk
 
15.03.18
10:27
вот пример с итс:
https://its.1c.ru/db/v838doc#bookmark:dev:TI000000471

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

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

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

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

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

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

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

7    null
7    null
7    4
7    4
null 4
null 4
null 4
17 Fram
 
17.03.18
00:02
(16) из запроса в (10) такой результат и должен быть
18 Klesk
 
17.03.18
00:11
19 Fram
 
17.03.18
00:37
(18) кто то где то врет. результат однозначно не соответствует  запросу
20 triviumfan
 
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
AdBlock убивает бесплатный контент. 1Сергей