|
1С 8.3 Странный синтаксис левого соединения | ☑ | ||
---|---|---|---|---|
0
СамоСабой
14.05.24
✎
13:02
|
Здравствуйте.
Имеется запрос |Выбрать | Покупатель.НомерДома КАК ПокупательНомерДома, | Поставщик.улица КАК ПоставщикУлица, | Поставщик.номерДома КАК ПоставщикНомерДома, | Поставщик.ТипДома КАК ПоставщикТипДома, | Продавец.улица КАК ПродавецУлица, | Продавец.номерДома КАК ПродавецНомерДома, | Продавец.ТипДома КАК ПродавецТипДома, | ТочкаДоставки.Улица КАК ТочкаДоставкиУлица, | ТочкаДоставки.НомерДома КАК ТочкаДоставкиНомерДома, | ТочкаДоставки.ТипДома КАК ТочкаДоставкиТипДома, | ЕСТЬNULL(КонечныйПокупатель.индекс, """") КАК КонечныйПокупательИндекс, | ЕСТЬNULL(КонечныйПокупатель.город, """") КАК КонечныйПокупательГород, | ЕСТЬNULL(КонечныйПокупатель.Поле5, """") КАК КонечныйПокупательНасПункт, | ЕСТЬNULL(КонечныйПокупатель.Улица, """") КАК КонечныйПокупательУлица, | ЕСТЬNULL(КонечныйПокупатель.НомерДома, """") КАК КонечныйПокупательНомерДома, | ЕСТЬNULL(КонечныйПокупатель.ТипДома, """") КАК КонечныйПокупательТипДома |ИЗ | Покупатель КАК Покупатель | ЛЕВОЕ СОЕДИНЕНИЕ КонечныйПокупатель КАК КонечныйПокупатель | ПО (ИСТИНА), | ТочкаДоставки КАК ТочкаДоставки, | Плательщик КАК Плательщик, | Продавец КАК Продавец, | Поставщик КАК Поставщик |
|||
1
Волшебник
14.05.24
✎
13:04
|
Какой вопрос-то?
|
|||
2
СамоСабой
14.05.24
✎
13:07
|
Тут Покупатель,КонечныйПокупатель, ТочкаДоставки, Платильщик,Продавец,Поставщик - это временные таблицы
Конструктор запроса ошибок не находит Не понятно, что означают перечисленные через запятую таблицы в : ЛЕВОЕ СОЕДИНЕНИЕ КонечныйПокупатель КАК КонечныйПокупатель | ПО (ИСТИНА), | ТочкаДоставки КАК ТочкаДоставки, | Плательщик КАК Плательщик, | Продавец КАК Продавец, | Поставщик КАК Поставщик Теоретически тут должно быть условия связи, а как понять приведенное выше. Прошу подсказать |
|||
3
Волшебник
14.05.24
✎
13:07
|
Это какой-то бред от такого же генератора бреда как и Вы.
|
|||
4
СамоСабой
14.05.24
✎
13:08
|
Этот бред - работает без ошибок
|
|||
5
Волшебник
14.05.24
✎
13:11
|
(4) Это не отменяет его статуса как бреда. Можно навалить тонны кода, которые будут выполняться, но тупо не нужны.
|
|||
6
СамоСабой
14.05.24
✎
13:12
|
Синтаксически тут все правильно - что это означает - не понятно
|
|||
7
Волшебник
14.05.24
✎
13:12
|
(6) Удалите.
|
|||
8
СамоСабой
14.05.24
✎
13:21
|
Похоже я догадался - это декартово произведение всех перечисленных таблиц, первая из которых - левое соединение.
Причем оно тоже фактически является декартовым -т.к. условие связи = ИСТИНА всегда. Если я правильно понимаю то декартово произведение дает не пустую таблицу только тогда когда во всех сомножителях есть хотябы одна запись. |
|||
9
DJ Anthon
14.05.24
✎
13:22
|
(5) в типовых полно соединений по истина, в чем бред-то? может, проще было бы по-другому, но хз, может, там шаблоны запросов формируются программно
|
|||
10
DJ Anthon
14.05.24
✎
13:22
|
(8) декартово произведение таблиц - это полное соединение, а тут левое. к одной таблице подтягивается другая таблица без условий. скорее всего, в них всего по одной записи и они склеиваются.
|
|||
11
MMB
14.05.24
✎
13:29
|
На сколько я понимаю когда таблицы перечислены через запятую то это полное соединение. Можно написать
| ПОЛНОЕ СОЕДИНЕНИЕ ТочкаДоставки КАК ТочкаДоставки ПО ИСТИНА, получится то же самое, т.е. декартово произведение. В запросах это имеет смысл только если в присоединяемых таким образом таблицах находится только одна строка, например значение какой-то константы - в этом случае количество записей не увеличится, просто добавится колонка. Это может быть нужно если ,например, в запрос внутри СКД нужно добавить значение константы чтобы использовать его в условиях или вычислениях, но при этом заполнять параметры или использовать функции общих модулей не хочется. Ну собственно пока я писал уже разобрались. |
|||
12
Ёпрст
14.05.24
✎
13:40
|
(0)
>>>Не понятно, что означают перечисленные через запятую таблицы в cross join |
|||
13
Мультук
гуру
14.05.24
✎
13:54
|
(0)
По тексту, читайте стандарты SQL -- они рулез. Ну хот я бы wiki:Join_(SQL) P.S. Давным-давно, в далекой... Вместо inner join писали вот так (см ниже) Потом стандарты стали дополнять, улучшать. SELECT * FROM Person, City WHERE Person.CityId = City.Id |
|||
14
СамоСабой
14.05.24
✎
13:53
|
Тут прикол в том, что во всех таблицах должна быть хотябы одна запись, а КонечныйПокупатель - может быть пусто
|
|||
15
Смотрящий
14.05.24
✎
13:57
|
(0) Работает ? Не трожъ !!
|
|||
16
СамоСабой
14.05.24
✎
14:03
|
(15) СамоСабой
|
|||
17
Мультук
гуру
14.05.24
✎
14:05
|
(14)
>> КонечныйПокупатель - может быть пусто И ради этого "там" написано ЛЕВОЕ СОЕДИНЕНИЕ ПО {похрен, все на всех. ИСТИНА} До сих пор чего-то не понятно? P.S. Шёл ёжик по лесу, забыл как работает sql и умер... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |