Три варианта запроса, выбиращего одно и то же, какой предпочтительнее?

1. xaozai 12.12.24 15:14 Сейчас в теме
ВЫБРАТЬ
 	ЗаказТовары.Номенклатура КАК Номенклатура,
 	ЗаказТовары.Сумма КАК Сумма,
 	ЗаказТовары.Ссылка.Организация КАК Организация,
 	ЗаказТовары.Ссылка.Контрагент КАК Контрагент
 ИЗ
 	Документ.Заказ.Товары КАК ЗаказТовары 
 
//---------------------------------------

 ВЫБРАТЬ
 	Заказ.Организация КАК Организация,
 	Заказ.Контрагент КАК Контрагент,
 	ЗаказТовары.Номенклатура КАК Номенклатура,
 	ЗаказТовары.Сумма КАК Сумма
 ИЗ
 	Документ.Заказ КАК Заказ
 		ЛЕВОЕ СОЕДИНЕНИЕ Документ.Заказ.Товары КАК ЗаказТовары
 		ПО ЗаказТовары.Ссылка = Заказ.Ссылка

//---------------------------------------
 
 ВЫБРАТЬ
  	Заказ.Организация КАК Организация,
  	Заказ.Контрагент КАК Контрагент,
  	Заказ.Товары.(
  		Номенклатура КАК Номенклатура,
  		Сумма КАК Сумма
  	) КАК ЗаказТовары
  ИЗ
  	Документ.Заказ КАК Заказ
Показать

Обоснуйте, пожалуйста, ответ. Может, ссылка на стандарты есть?
Найденные решения
27. user1936660 12.12.24 17:14 Сейчас в теме
(25)
интересно
Первый:
SEL ECT
T1._Fld5181RRef,
T1._Fld5182,
T2._Fld5157RRef,
T2._Fld5168RRef
FROM dbo._Document765_VT5179 T1
LEFT OUTER JOIN dbo._Document765 T2
ON T1._Document765_IDRRef = T2._IDRRef
Показать

Третий:
INS ERT INTO #tt2 WITH(TABLOCK) (_C_1RRef, _C_2RRef, _TTC_1) SEL ECT
T1._Fld5157RRef,
T1._Fld5168RRef,
T1._IDRRef
FROM dbo._Document765 T1

SELECT
T2._C_1RRef AS Fld5157RRef,
T2._C_2RRef AS Fld5168RRef,
T2.SDBL_IDENTITY AS SDBL_IDENTITY
FR OM #tt2 T2 WITH(NOLOCK)

SELE CT
T3._Fld5181RRef,
T3._Fld5182,
T4.SDBL_IDENTITY AS SDBL_IDENTITY
FR OM dbo._Document765_VT5179 T3
INNER JOIN #tt2 T4 WITH(NOLOCK)
ON T4._TTC_1 = T3._Document765_IDRRef
ORDER BY 3 ASC
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1936660 12.12.24 15:20 Сейчас в теме
(1)
выбиращего одно и то же
Нет.
3. xaozai 12.12.24 15:23 Сейчас в теме
4. RustamZz 12.12.24 15:25 Сейчас в теме
(3) 2 и 3. Не одно и тоже. Ну и 1. тоже в некоторых случаях.
7. xaozai 12.12.24 15:27 Сейчас в теме
(4) Ну, там просто вложенная таблица будет в результате.

Это не суть.

Какой из трех вариантов предпочтительнее?

Конструктор печатных форм 1С делает третий вариант, но мне кажется, более оптимальным второй.
8. user1936660 12.12.24 15:28 Сейчас в теме
(7)
Ну, там просто вложенная таблица будет в результате.
Не только.
5. Sashares 35 12.12.24 15:26 Сейчас в теме
(3) Результат не одинаковый у запросов.
6. user1936660 12.12.24 15:27 Сейчас в теме
(3)
Что "Нет"?
Слово такое, отрицание обозначает. Verstehst du?

Эти запросы дадут на одинаковых данных разные результаты.
9. xaozai 12.12.24 15:28 Сейчас в теме
(6) Я надеялся на развернутый ответ, не односложный.
10. user1936660 12.12.24 15:28 Сейчас в теме
(9)
надеялся
Ну сделай запрос к документу с пустой табличной частью
Sashares; RustamZz; +2 Ответить
11. xaozai 12.12.24 15:32 Сейчас в теме
(10) Ок. Первый запрос в этом случае не выведет данные из шапки.

Второй или третий лучше использовать для отчета?

И еще интересует, когда в первом запросе выбирается два (и более) реквизита из шапки интерпретатор/оптимизатор запросов 1С будет делать одно соединение с таблицей шапки или по числу выбираемых реквизитов?
12. user1936660 12.12.24 15:34 Сейчас в теме
(11)
для отчета
Зависит от его структуры.
13. user1936660 12.12.24 15:39 Сейчас в теме
(11)
И еще интересует
Запусти профайлер и посмотри.
14. xaozai 12.12.24 15:40 Сейчас в теме
(13) У меня прав нет на сервере.
15. user1936660 12.12.24 16:03 Сейчас в теме
16. xaozai 12.12.24 16:05 Сейчас в теме
(15) Много телодвижений...

Вообще, мне кажется, для разработчиков 1С должны быть рекомендации на этот счет, документация...
17. user1936660 12.12.24 16:10 Сейчас в теме
(16)
для разработчиков 1С должны быть рекомендации на этот счет, документация
Много телодвижений
18. VmvLer 12.12.24 16:13 Сейчас в теме
2-й вариант, только не левое а правое или ТЧ поставить ведущей.
19. Sashares 35 12.12.24 16:15 Сейчас в теме
(18) И будет тоже самое, что в 1. То есть с пустой ТЧ запрос будет пустой.
20. VmvLer 12.12.24 16:18 Сейчас в теме
(19) все три варианта должны давать один результат. в первом ведущая ТЧ.

Ссылки на заказ вообще нет в полях, значит в результат нужен состав ТЧ
21. user1936660 12.12.24 16:33 Сейчас в теме
22. user1936660 12.12.24 16:45 Сейчас в теме
(20)
Ссылки на заказ вообще нет в полях, значит в результат нужен состав ТЧ
А организация и контрагент из шапки, это так, херня какая-то.

Вот за это вот 1Сников за программистов и не считают.
24. VmvLer 12.12.24 16:52 Сейчас в теме
(22) не херня, а значение NULL будет в тех полях.
Выражаетесь техническим языком, пятница 13-го завтра.
26. user1936660 12.12.24 17:01 Сейчас в теме
(24)
не херня, а значение NULL
Ты б запрос что-ли попробовал написать, теоретик.
30. VmvLer 12.12.24 17:42 Сейчас в теме
(26) запрос очевиден точно так же как и ваше чванство.
32. user1936660 12.12.24 18:25 Сейчас в теме
(30)
запрос очевиден
Ты его уже написал? Умничка какой!
Теперь запускай.
23. Said-We 12.12.24 16:47 Сейчас в теме
(1) "какой предпочтительнее?"
Встречный вопрос. Предпочтительнее для чего?

Последний использую только в консоли данные посмотреть и то не так:
Выбрать первые 100 т.* из <НекаяТаблицаСТабличнымиЧастями> как т Где....
Такой вариант идеально для этого подходит. И только для этого и подходит. В остальных случаях, наверное никогда. Я не большой специалист, но никогда не использовал его в других случаях.

Первые два используются условно пополам. Смотря какая задача решается. Результат же они дают разный.
И это не все случаи, которые используются. Есть ещё с внутренним соединением. Есть ещё...
user1936660; +1 Ответить
25. xaozai 12.12.24 17:00 Сейчас в теме
(23) Меня больше интересует вопрос производительности. И интересно, во что превращаются интерпретатором запросы 1 и 3...
27. user1936660 12.12.24 17:14 Сейчас в теме
(25)
интересно
Первый:
SEL ECT
T1._Fld5181RRef,
T1._Fld5182,
T2._Fld5157RRef,
T2._Fld5168RRef
FROM dbo._Document765_VT5179 T1
LEFT OUTER JOIN dbo._Document765 T2
ON T1._Document765_IDRRef = T2._IDRRef
Показать

Третий:
INS ERT INTO #tt2 WITH(TABLOCK) (_C_1RRef, _C_2RRef, _TTC_1) SEL ECT
T1._Fld5157RRef,
T1._Fld5168RRef,
T1._IDRRef
FROM dbo._Document765 T1

SELECT
T2._C_1RRef AS Fld5157RRef,
T2._C_2RRef AS Fld5168RRef,
T2.SDBL_IDENTITY AS SDBL_IDENTITY
FR OM #tt2 T2 WITH(NOLOCK)

SELE CT
T3._Fld5181RRef,
T3._Fld5182,
T4.SDBL_IDENTITY AS SDBL_IDENTITY
FR OM dbo._Document765_VT5179 T3
INNER JOIN #tt2 T4 WITH(NOLOCK)
ON T4._TTC_1 = T3._Document765_IDRRef
ORDER BY 3 ASC
Показать
28. xaozai 12.12.24 17:19 Сейчас в теме
(27) О, спасибо!

Первый и второй, выходит, похожи. Ну, за искл. того, какая основная таблица, с какой соединение...

Третий, вероятно, будет менее производительный...
Интересно, что именно его предлагает конструктор печати 1С...
29. user1936660 12.12.24 17:22 Сейчас в теме
(28)
Первый и второй, выходит, похожи
Да
предлагает конструктор
Выборку перебирать проще. Ну и конструктор, он для тупых.
31. spacecraft 12.12.24 18:01 Сейчас в теме
(28)
Первый и второй, выходит, похожи. Ну, за искл. того, какая основная таблица, с какой соединение...

Вот это самое искл. может сильно влиять на производительность.
Сравните:
Statistics: RecordsScanned = 320
Statistics: RecordsScanned = 191

Пояснять что чему соответствует не надо?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот