Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Убрать соединение с подзапросом / 10 сообщений из 10, страница 1 из 1
13.09.2011, 19:28
    #37438863
Багер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
Здравствуйте!

Подскажите, пожалуйста, как переписать нижеследующее внутреннее соединение с подзапросом, чтобы в результате укладываться в рекомендации, как минимум "не используйте соединения с подзапросами". При этом не потерять производительность!

Краткое человечье описанье:
Выбрать неудалённые Ведомости, которые не присутствуют в неудалённых СписанияхСРасчётногоСчёта в табличной части ПеречислениеЗаработнойПлаты.

Подзапрос Выбирает неудалённые СписанияСРасчётногоСчёта. Соединяется с таблицей своей табличной части ПеречислениеЗаработнойПлаты. С результатом - соединяется Ведомости на ЗП и, если Ведомости при соединении получают NULL, значит - не оплачены.

[sql]
ВЫБРАТЬ
ЛОЖЬ КАК Флаг,
ЗарплатаКВыплатеОрганизаций.СпособВыплаты,
ЗарплатаКВыплатеОрганизаций.Комментарий,
ЗарплатаКВыплатеОрганизаций.СуммаДокумента,
ЗарплатаКВыплатеОрганизаций.Организация,
ЗарплатаКВыплатеОрганизаций.Дата КАК Дата,
ЗарплатаКВыплатеОрганизаций.Ссылка
ИЗ
Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СписаниеСРасчетногоСчета.Ссылка КАК Ссылка
ИЗ
Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ГДЕ
СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ) КАК ВложенныйЗапрос
ПО (ВложенныйЗапрос.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка)
ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка
ГДЕ
СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка ЕСТЬ NULL
И ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ

УПОРЯДОЧИТЬ ПО
Дата УБЫВ
[/sql]
...
Рейтинг: 0 / 0
13.09.2011, 20:00
    #37438912
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
Ну и сделайте 1 запрос к табличной части с проверкой условия на пометку удаления. Никаких соединений и подзапросов.
...
Рейтинг: 0 / 0
13.09.2011, 20:38
    #37438957
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
ВЫБРАТЬ
ЛОЖЬ КАК Флаг,
ЗарплатаКВыплатеОрганизаций.СпособВыплаты,
ЗарплатаКВыплатеОрганизаций.Комментарий,
ЗарплатаКВыплатеОрганизаций.СуммаДокумента,
ЗарплатаКВыплатеОрганизаций.Организация,
ЗарплатаКВыплатеОрганизаций.Дата КАК Дата,
ЗарплатаКВыплатеОрганизаций.Ссылка
ИЗ
Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета ПО СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ И СписаниеСРасчетногоСчета.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка
ГДЕ
СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка ЕСТЬ NULL
УПОРЯДОЧИТЬ ПО
ЗарплатаКВыплатеОрганизаций.Дата УБЫВ


ЗЫ Точка - неявное соединение.
...
Рейтинг: 0 / 0
13.09.2011, 20:51
    #37438973
Багер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
Не понял???
...
Рейтинг: 0 / 0
13.09.2011, 21:21
    #37439009
Багер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
Переделал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
	Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
			ПО (СписаниеСРасчетногоСчета.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка
					И СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ)
	ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка

Правильно понял?
...
Рейтинг: 0 / 0
13.09.2011, 21:30
    #37439019
Багер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
То есть, в разделе "Связи" как раз и можно устанавливать условия на первичный отбор ДО соединений?
А через две точки:

Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка И СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка.СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ

?
...
Рейтинг: 0 / 0
13.09.2011, 22:02
    #37439049
Багер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
А когда добавил ещё и
И ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ:

Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка И СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка.СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ И ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ


Зависло и не отвечает очень долго... ПачиМу?
...
Рейтинг: 0 / 0
13.09.2011, 22:18
    #37439066
Багер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
Патамушто таблицу забыл убрать... 70000 строк в результате ))

НО! Не работает так:

Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка И СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка.СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ И ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ

Последнее условие должно обязательно находиться в ГДЕ, иначе никакого эффекта (удалённые ведомости все попадают в выборку):
ГДЕ ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ

ПачиМу?
...
Рейтинг: 0 / 0
14.09.2011, 05:21
    #37439251
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
На всякий случай...
1) По должно стоять сразу за каждым Соединением;
2) .Ссылка. - должно быть аналогично . . По результату - аналогично, а вот по поведению - не помню.
3) В По ограничение отработает на исходные таблицы до обединения, в где - на результате. Т.к. у Вас левое соедеинение, то отсечённые записи левой лаблицы "восстанавливаются" на этапе обединения.
...
Рейтинг: 0 / 0
14.09.2011, 23:33
    #37440927
Багер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать соединение с подзапросом
Опять я тупанул... отбирать ведомости, неудалённые, которые не имеются в соединении, если априори - в соединении их не будет, они же удалённые, а в выборку попадут, т.к. в соединении не учавствовали, потому что - удалённые. ПипеЦ!!!

Спасибо, въехал ))
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Убрать соединение с подзапросом / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]