|
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПО Истина - что это такое, подскажите | ☑ | ||
---|---|---|---|---|
0
IgorRst78
27.04.18
✎
10:05
|
Возник вопрос - задачка была.
Объяснить что такое "ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПО Истина". В чем физический смысл, для чего используется и каков результат действия. Несмотря на то,что 1С очень долго занимаюсь - не смог. И вопрос заинтересовал. Видел эту конструкцию не раз в ЗУПе. Раскажите пожалуйста, кто в теме. Что такое ВНЕТРЕННЕЕ СОЕДИНЕНИЕ можно не расказывать - пользуюсь часто. Интересует именно "ПО Истина". Пример - есть 2 талбицы соединенные по id: Табл 1 Табл 2 Наим id Наим Товар 1 21 Заказчик 2 22 Товар 2 22 Заказчик 3 23 Товар 3 23 Заказчик 1 21 Товар 1 21 Что будет в результате "ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПО Истина" и Почему? |
|||
1
Провинциальный 1сник
27.04.18
✎
10:06
|
Полное соединение другими словами?
|
|||
2
Fragster
гуру
27.04.18
✎
10:07
|
из "а", "б" и 1, 2 получить
а, 1 а, 2 б, 1 б, 2 например для соединения справочника и периода при построении отчета за весь период, если нужна программная обработка, а 1сник не умеет в дополнение. |
|||
3
Вафель
27.04.18
✎
10:09
|
эт называется декартово произведение
|
|||
4
IgorRst78
27.04.18
✎
10:22
|
(1)нет. См описание в (0)
|
|||
5
karagach
27.04.18
✎
10:23
|
Это загадка природы имхо)
|
|||
6
IgorRst78
27.04.18
✎
10:23
|
(2)не понял.
т.е. в этом случае каждая запись табл 1 умножается на запись табл 2 ? (3)а попроще. |
|||
7
FIXXXL
27.04.18
✎
10:24
|
(2) декартово же
ВЫБРАТЬ "A" КАК Поле1 ПОМЕСТИТЬ АБ ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Б" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ "1" КАК Поле1 ПОМЕСТИТЬ в12 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "2" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ АБ.Поле1, в12.Поле1 КАК Поле11 ИЗ АБ КАК АБ, в12 КАК в12 зачем вообще тогда ВНУТРЕННЕЕ по ИСТИНА? |
|||
8
ptiz
27.04.18
✎
10:24
|
(6) " каждая запись табл 1 умножается на запись табл 2" - да
|
|||
9
IgorRst78
27.04.18
✎
10:25
|
Можно на примере, который я привел?
N/t/ что будет с теми записями у которых в обех таблицах совпадает Id - ведет себя как обычное "ВНУТРЕННЕЕ СОЕДИНЕНИЕ". А что будет с задвоенными по id записями? |
|||
10
IgorRst78
27.04.18
✎
10:26
|
Ведет ли себя одинаково
ВНУТРЕННЕЕ СОЕДИНЕНИЕ по Истина и ПОЛНОЕ СОЕДИНЕНИЕ ПО Истина |
|||
11
IgorRst78
27.04.18
✎
10:27
|
А для каких случаев это нужно?
Почему иногда в ЗУПе встречается? |
|||
12
FIXXXL
27.04.18
✎
10:27
|
(9) забудь про ИД, ты же не указываешь это поле в условиях связи
|
|||
13
IgorRst78
27.04.18
✎
10:29
|
(12)понял!!!
|
|||
14
FIXXXL
27.04.18
✎
10:30
|
(11) у меня в ценообразовании встречается такое, когда цена выставляется на список номенклатуры по списку городов
|
|||
15
FIXXXL
27.04.18
✎
10:32
|
(14) +
Товар1 100,02 Город1 Товар1 100,02 Город2 Товар1 100,02 Город3 и т.п. |
|||
16
IgorRst78
27.04.18
✎
10:34
|
Спасибо всем!
Понял. Не очень понял правда целесообразность этой конструкции |
|||
17
trad
27.04.18
✎
10:38
|
(10) по разному. например когда одна из таблиц пустая
|
|||
18
Mankubus
27.04.18
✎
10:42
|
(9) что будет что будет... накидал бы запрос в консоли да посмотрел
|
|||
19
vicof
27.04.18
✎
10:47
|
(18) +1
|
|||
20
Сияющий в темноте
27.04.18
✎
12:35
|
В старом sql было select * from tab1,tab2
потом такой синкасис утратился и осталось только соединение с условием,а если условия нет,то пишем Истина при исполнении sql сервер берет одну таблицу и для каждой ее строки подставляет все строки другой таблицы,которые годяться по условию,в данном случае,будут все строки внутреннее соединение позволяет опустить строки с пропуском одной из таблиц,но здесь нулевые записи не появятся |
|||
21
Fragster
гуру
27.04.18
✎
12:40
|
(20) он не утратился, вполне работает
|
|||
22
Ненавижу 1С
гуру
27.04.18
✎
12:42
|
(21) работает, но помечен как deprecated
|
|||
23
Вафель
27.04.18
✎
12:49
|
(22) это где он помечен?
|
|||
24
Митяйский
27.04.18
✎
12:50
|
(16) Разработчики типовых конф очень любят гонять объект запроса по общим модулям, и менять там текст запроса через СтрЗаменить().
Конструкция типа "соединение по истина" гораздо удобнее для дальнейшей ее подмены на другое условие объединения, особенно если в запросе могут изменяться имена таблиц. Но это не точно. |
|||
25
Fragster
гуру
27.04.18
✎
12:54
|
(24) а еще лучше &_УсловиеСединенияТаблицыАиБ, тогда если где-то забыли заменить - то будет ошибка + видно, что же мы заменяем. Ну и несколько условий соединения так можно сделать.
|
|||
26
Сти
27.04.18
✎
12:57
|
(23) в мечтах, наверное )
Устаревшим обозначили использование WHERE вместо JOIN, т.е. вместо SELECT t1.a, t2.b from t1, t2 where t1.c = t2.c крайне рекомендуют SELECT t1.a, t2.b from t1 INNER JOIN t2 ON t1.c = t2.c Вот и все. |
|||
27
Ненавижу 1С
гуру
27.04.18
✎
13:10
|
(23) ну не зря же специально добавили синтаксис CROSS JOIN
В общем случае для выполнения перекрестного объединения настоятельно рекомендуется использовать ключевые слова CROSS JOIN вместо альтернативного синтаксиса. Благодаря этому, другой программист сможет легко понять назначение данного фрагмента кода! Кроме того, использование альтернативного синтаксиса на основе списка разделенных запятыми таблиц чревато появлением ошибок, например, может произойти ненамеренное перекрестное объединение. http://datareview.info/article/8-sposobov-obedineniya-join-tablic-v-sql-chast-1/ а официально скорее всего ANSI не комментирует |
|||
28
Said_We
27.04.18
✎
13:44
|
(20) Результат запросов будет разный, если одна из таблиц будет пустой. Декартово перемножение с пустой таблицей дает пустую таблицу. Если используется LEFT JOIN, то по первой таблице будут строки, а потом уже условие отработает.
Т.е. конструкции select Т1.1, Т2.2 from T1, T2 И select Т1.1, Т2.2 from T1 LEFT JOIN T2 ON 1=1 Дадут разный результат, если Т2 будет пустая таблица. Это не замена одной конструкции на другую, это просто разные конструкции, которые по своей логике могут использоваться в разных случаях. |
|||
29
Вафель
27.04.18
✎
13:46
|
(28) у нас не left, а inner
|
|||
30
Адинэснег
27.04.18
✎
14:16
|
произведение множеств, пересечение скидок где-то так считал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |