|
Левое соединение РС | ☑ | ||
---|---|---|---|---|
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
|
(10) wiki:Join_(SQL)
|
|||
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |