|
Как в 1С написать конструкцию следующего вида? | ☑ | ||
---|---|---|---|---|
0
Said_We
21.12.16
✎
16:46
|
Select
A.A ,(Select Top 1 B.A From B as B Where A.A = B.A Order by B.B) as B From A as A |
|||
1
Said_We
21.12.16
✎
16:48
|
Что-то грустно писать по два левых соединения что бы по периодам разбить и вытащить значения.
|
|||
2
mkalimulin
21.12.16
✎
16:48
|
У тебя второе поле результата - таблица?
|
|||
3
Said_We
21.12.16
✎
16:49
|
нет
Это одно значение. В MS SQL такие конструкции работают. |
|||
4
Said_We
21.12.16
✎
16:50
|
В ОРАКЛЕ наверняка тоже.
По моему это стандарт 92 или 95 года (могу конечно ошибаться). |
|||
5
Garykom
гуру
21.12.16
✎
16:56
|
(1) Догадайся в какое кол-во "левых соединений" превращает интерпретатор sql движка изврат из (0) ?
|
|||
6
mehfk
21.12.16
✎
17:01
|
(0) Разработчики платформы еще не дошли до того места в Books Online где такая инструкция описана.
|
|||
7
Said_We
21.12.16
✎
17:08
|
(5) А что догадываться. Я попробовал написать стандартно через два левых соединения и через эту конструкцию на большом количестве строк в таблице.
Пробовал пару лет назад ещё на 7.7 на 1С++ на MS SQL и SQLLite. Результат на MS SQL и SQLLite немного разный, но в любом случае на 1-2 порядка быстрее будет конструкция в (0). |
|||
8
Said_We
21.12.16
✎
17:12
|
(5) В Консоле MS SQL самостоятельно попробуйте.
Почему про 7.7 упомянул? В 7.7 периодические значения реквизитов всех справочников хранятся в одной таблице. Поэтому таблица огромная и тяжёлая. На ней хорошо видна разница в скорости выполнения. |
|||
9
Said_We
21.12.16
✎
17:13
|
(6) Books Online - это что имеется ввиду?
|
|||
10
Cool_Profi
21.12.16
✎
17:14
|
(9) И этот человек жалуется, что в 1с что-то не реализовано, а вот в SQL...
|
|||
11
Garykom
гуру
21.12.16
✎
17:15
|
(7) "Для перекрёстного соединения (декартова произведения) CROSS JOIN в некоторых реализациях SQL используется оператор «запятая» (,)"
Просто конструкция из (0) в MS SQL и прочих выполняется более параллельно, начинает строить внешние "все сочетания" сразу как только выдается какой то результат от внутреннего подзапроса в скобках. При последовательном выполнении в 1С с использованием к примеру ВТ общее время да будет больше, но при этом средняя нагрузка на систему меньше (другие процессы/сеансы/пользователи не так пострадают). |
|||
12
mehfk
21.12.16
✎
17:15
|
||||
13
Said_We
21.12.16
✎
17:17
|
(10) Кто жалуется? Я спросил как это в 1С 8 запустить?
|
|||
14
Cool_Profi
21.12.16
✎
17:18
|
(13) Ну нет такого в языке запросов 1с
|
|||
15
Said_We
21.12.16
✎
17:23
|
(11) Не совсем понял что такое "более параллельно"? Чем-то напоминает "немножко беременна".
Кто говорит что таблица В в (0) не может быть ВТ с необходимым индексом по полю В? "средняя нагрузка на систему меньше..." Если запрос выполняется пару минут и пару секунд, то как от пары секунд пользователи сильнее пострадают? А именно такая разница парой получается. Чушь по моему какая-то. (13) И кроме прямых запросов хитростей никаких нет? |
|||
16
Said_We
21.12.16
✎
17:27
|
(12) А это... :-)
|
|||
17
Fragster
гуру
21.12.16
✎
17:29
|
Основная
левое соединение Таб По 1 В (Выбрать Первые 1 1 Из Таб Как ТабОтбор Где ТабОтбор.Поле = Основная.Поле Упорядочить По ТабОтбор.Ключ) |
|||
18
Said_We
21.12.16
✎
17:32
|
(17) Ну что-то похожее. Завтра попробую.
|
|||
19
Said_We
21.12.16
✎
17:33
|
(17) Спасибо.
|
|||
20
Fragster
гуру
21.12.16
✎
17:34
|
возможно я накосячил и надо так:
Основная левое соединение Таб По Таб.Ключ В (Выбрать Первые 1 ТабОтбор.Ключ Из Таб Как ТабОтбор Где ТабОтбор.Поле = Основная.Поле Упорядочить По ТабОтбор.Ключ) |
|||
21
Said_We
21.12.16
✎
17:38
|
(20) Я суть понял. В РЛС такое часто используют.
Единственное никогда не видел упорядочить внутри этой конструкции. Вот это собственно и попробую. |
|||
22
rabbidX
21.12.16
✎
17:39
|
(20) Это соединение с вложенным запросом? Некошерно же. И почему условия соединения самого вложенного запроса? Или я неправильно понял Ваш запрос?
|
|||
23
rabbidX
21.12.16
✎
17:41
|
+(22) через ВТ красивше.
|
|||
24
Fragster
гуру
21.12.16
✎
17:42
|
(21) первый вариант даст все записи из соединяемой таблицы, нужен второй
(22) нет, это вложенный запрос в условиях соединения |
|||
25
Fragster
гуру
21.12.16
✎
17:42
|
(23) через ВТ медленнее
|
|||
26
rabbidX
21.12.16
✎
17:47
|
(0) из таблицы А в результрующую выборку должно попасть то же поле, которое прописано в соединении?
Тогда можно так Выбрать В.А, Минимум(В.В) Из В Как В Где В.А в (Выбрать А.А Из А Как А) Сгруппировать по В.А |
|||
27
rabbidX
21.12.16
✎
17:50
|
(25) на больших индексированных таблицах может и не медленнее быть в теории.
|
|||
28
Fragster
гуру
21.12.16
✎
17:52
|
(27) на больших индексированных таблицах само создание временной таблицы убьет идею
|
|||
29
Said_We
21.12.16
✎
18:05
|
(26) Неа.
Результат совсем другой будет в запросах в (0) и в (26). Даже по количеству строк. Строк должно быть столько сколько в А. В варианте (26) строк будет либо как в В либо меньше. Я не зря в (1) написал про разбиение по периодам. Даты окончания периода может и не быть - т.е. действует до сих пор. |
|||
30
Said_We
21.12.16
✎
18:58
|
(20) ДА!!!
Так работает. Спасибо большое. |
|||
31
Said_We
21.12.16
✎
19:11
|
Не (0) конечно, но и не два левых соединения, а одно.
|
|||
32
mistеr
21.12.16
✎
19:24
|
(14) Такое есть в языке СКД.
|
|||
33
Said_We
22.12.16
✎
01:18
|
(32) Пример есть?
|
|||
34
Said_We
22.12.16
✎
14:11
|
(32) Потерялся... UP
|
|||
35
mistеr
22.12.16
✎
14:16
|
(33) ВычислитьВыражение()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |