Имя: Пароль:
1C
 
Вопрос по связям таблиц в конструкторе
0 program345
 
03.07.25
07:39
Привет!
Есть запрос:

ВЫБРАТЬ
	ЗаказКлиента.Ссылка КАК ЗаказКлиента,
	ЗаказКлиента.Номер КАК НомерЗаказа,
	ЗаказКлиента.Дата КАК ДатаЗаказа,
	ЗаказКлиента.НомерПоДаннымКлиента КАК НомерЗаказаПоДаннымКлиента
ИЗ
	Документ.ЗаказКлиента КАК ЗаказКлиента
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
		ПО ЗаказКлиента.Ссылка = ЧекККМТовары.УТР_ЗаказКлиента.Ссылка
			И (ЧекККМТовары.Ссылка.Проведен)
ГДЕ
	ЗаказКлиента.Проведен

СГРУППИРОВАТЬ ПО
	ЗаказКлиента.Ссылка,
	ЗаказКлиента.Номер,
	ЗаказКлиента.Дата,
	ЗаказКлиента.НомерПоДаннымКлиента


Вопрос: зачем тут в соединении таблиц ЧекККМТовары.Ссылка.Проведен (+ скрин)? разве не проще указать в условии ЧекККМТовары.Ссылка.Проведен? Или это равнозначно?
1 Chameleon1980
 
03.07.25
08:00
при внутреннем соединении - нет смысла указывать условие в соединении - да - тут будет равнозначно, что в ГДЕ, что в соединении.
Если бы было, например, левое и условие на правую таблицу в секции ГДЕ, то соединение превратилось бы во внутреннее.
2 Hmster
 
03.07.25
08:03
(1) равнозначно с точки зрения результата запроса, с точки зрения выполнения запроса - разные вещи
3 LoneMan
 
03.07.25
08:08
В первом случае 1с наверно построит такой запрос:

ВЫБРАТЬ
    ЗаказКлиента.Ссылка КАК Ссылка,
    ЧекККМТовары.Номенклатура КАК Номенклатура
ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ КАК ЧекККМ
            ПО (ЧекККМТовары.Ссылка = ЧекККМ.Ссылка)
        ПО ЗаказКлиента.Ссылка = ЧекККМТовары.Заказ
            И ЧекККМ.Проведен

Во втором —

ВЫБРАТЬ
    ЗаказКлиента.Ссылка КАК Ссылка,
    Товары1.Номенклатура КАК Номенклатура
ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК Товары
        ПО ЗаказКлиента.Ссылка = Товары.Заказ
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ КАК ЧекККМ
        ПО Товары.Ссылка = ЧекККМ.Ссылка
ГДЕ
    ЧекККМ.Проведен
4 Hmster
 
03.07.25
08:12
(2) в первом случае отбор происходит при соединении, во втором после. Как правило первый вариант быстрее.
5 LoneMan
 
03.07.25
08:18
Результат будет один, как исполнит запрос оптимизатор - имхо, тестировать надо
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн