Дублирование записей при выполнении запроса
Доброго времени суток.
Столкнулся со следующей проблемой: если добавить в select поле СкладРаспиловОстаткиИОбороты.Обработка, то происходит дублирование для тех записей, где присутствует то самое поле. При этом, если его убрать, то дублирование пропадает. Само поле является ссылкой на справочник.
Столкнулся со следующей проблемой: если добавить в select поле СкладРаспиловОстаткиИОбороты.Обработка, то происходит дублирование для тех записей, где присутствует то самое поле. При этом, если его убрать, то дублирование пропадает. Само поле является ссылкой на справочник.
ВЫБРАТЬ
ВсеБлоки.НомерБлока КАК НомерБлока,
ВсеРаспилы.НомерРаспила КАК НомерРаспила,
НомераРаспиленныхБлоков.Ссылка.Дата КАК ДатаРаспила,
ДокументРаспилы.Сотрудник КАК СотрудникРаспил,
ВсеБлоки.Объем КАК ОбъемБлока,
ВсеРаспилы.Длина * ВсеРаспилы.Толщина * ВсеРаспилы.Ширина / 1000000 КАК ОбьемРаспила,
ВсеРаспилы.Длина * ВсеРаспилы.Ширина / 10000 КАК ПлощадьРаспила,
ОкантовкаРаспилы.Длина * ОкантовкаРаспилы.Толщина * ОкантовкаРаспилы.Ширина / 1000000 КАК ОбьемПродукции,
ОкантовкаРаспилы.Длина * ОкантовкаРаспилы.Ширина / 10000 КАК ПлощадьПродукции,
ОкантовкаРаспилы.Количество КАК КоличествоПродукции,
ВсеБлоки.Месторождение КАК Месторождение,
ОкантовкаРаспилы.ВидПродукции КАК ВидПродукции,
ОкантовкаРаспилы.Количество КАК КоличествоОкантовка,
ОкантовкаРаспилы.Объем КАК ОбъемОкантовка,
ОкантовкаРаспилы.Площадь КАК ПлощадьОкантовка,
ОкантовкаРаспилы.Ссылка.Сотрудник КАК СотрудникОкантовка,
ОбработкаРаспилы.Площадь КАК ПлощадьОбработки
ИЗ
РегистрНакопления.СкладБлоков.ОстаткиИОбороты(, , авто, , ) КАК СкладБлоковОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Блоки КАК ВсеБлоки
ПО (ВсеБлоки.НомерБлока = СкладБлоковОстаткиИОбороты.НомерБлока)
ПРАВОЕ СОЕДИНЕНИЕ РегистрНакопления.СкладРаспилов.ОстаткиИОбороты КАК СкладРаспиловОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Распилы КАК ВсеРаспилы
ПО (СкладРаспиловОстаткиИОбороты.НомерРаспила = ВсеРаспилы.НомерРаспила)
ПО (ВсеРаспилы.НомерБлока = ВсеБлоки.НомерБлока)
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ФильтрСписанные.НомерБлока КАК НомерБлока,
ФильтрСписанные.СписатьБлок КАК СписатьБлок,
НомераРаспиленныхБлоков.Ссылка КАК Ссылка,
НомераРаспиленныхБлоков.НомерСтроки КАК НомерСтроки,
НомераРаспиленныхБлоков.НомерБлока КАК НомерБлока1,
НомераРаспиленныхБлоков.НомерРаспила КАК НомерРаспила,
НомераРаспиленныхБлоков.Длина КАК Длина,
НомераРаспиленныхБлоков.Ширина КАК Ширина,
НомераРаспиленныхБлоков.Толщина КАК Толщина,
НомераРаспиленныхБлоков.Площадь КАК Площадь,
НомераРаспиленныхБлоков.Объем КАК Объем,
НомераРаспиленныхБлоков.СписатьБлок КАК СписатьБлок1
ИЗ
(ВЫБРАТЬ
НомераРаспиленныхБлоков.НомерБлока КАК НомерБлока,
НомераРаспиленныхБлоков.СписатьБлок КАК СписатьБлок
ИЗ
Документ.Распил.Распилы КАК НомераРаспиленныхБлоков
ГДЕ
НомераРаспиленныхБлоков.СписатьБлок = ИСТИНА
СГРУППИРОВАТЬ ПО
НомераРаспиленныхБлоков.НомерБлока,
НомераРаспиленныхБлоков.СписатьБлок) КАК ФильтрСписанные
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Распил.Распилы КАК НомераРаспиленныхБлоков
ПО (НомераРаспиленныхБлоков.НомерБлока = ФильтрСписанные.НомерБлока)
И (НомераРаспиленныхБлоков.СписатьБлок = ИСТИНА)) КАК НомераРаспиленныхБлоков
ПО (ВсеБлоки.НомерБлока = НомераРаспиленныхБлоков.НомерБлока)
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Окантовка.Распилы КАК ОкантовкаРаспилы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Окантовка КАК Окантовка
ПО (ОкантовкаРаспилы.Ссылка = Окантовка.Ссылка)
ПО (ОкантовкаРаспилы.НомерРаспила = СкладРаспиловОстаткиИОбороты.НомерРаспила)
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Распил КАК ДокументРаспилы
ПО (ВсеРаспилы.Регистратор = ДокументРаспилы.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Обработка.Распилы КАК ОбработкаРаспилы
ПО (ВсеРаспилы.НомерРаспила = ОбработкаРаспилы.НомерРаспила)
ГДЕ ВсеБлоки.НомерБлока = "9731"
ПоказатьПрикрепленные файлы:


По теме из базы знаний
- Потребление места на диске С в папке temp
- Правила запроса. Выдержки из книги "Настольная книга 1С:Эксперта по технологическим вопросам"
- Алгоритм нахождения причины ошибки "Обнаружено дублирование ключевых значений в колонках:..." в динамическом списке
- Ловушка функции запроса АВТОНОМЕРЗАПИСИ()
- Проблемы производительности. Различные в динамических списках
Найденные решения
Да, правое соединение вижу, пожалуй, впервые. Экзотика. Приятно, что среди коллег по 1С есть такие продвинутые знатоки запросов, это редкое явление.
В этой таблице, надо полагать, несколько записей по каждому критерию соединения. Вот СУБД и выдает несколько записей. Почему "дублируется"? Что попросили, то и получили. Соглашусь с коллегой (2), для отладки удобно поделить на несколько запросов, потом можно обратно вернуть в один, если это зачем-то нужно.
В этой таблице, надо полагать, несколько записей по каждому критерию соединения. Вот СУБД и выдает несколько записей. Почему "дублируется"? Что попросили, то и получили. Соглашусь с коллегой (2), для отладки удобно поделить на несколько запросов, потом можно обратно вернуть в один, если это зачем-то нужно.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Да, правое соединение вижу, пожалуй, впервые. Экзотика. Приятно, что среди коллег по 1С есть такие продвинутые знатоки запросов, это редкое явление.
В этой таблице, надо полагать, несколько записей по каждому критерию соединения. Вот СУБД и выдает несколько записей. Почему "дублируется"? Что попросили, то и получили. Соглашусь с коллегой (2), для отладки удобно поделить на несколько запросов, потом можно обратно вернуть в один, если это зачем-то нужно.
В этой таблице, надо полагать, несколько записей по каждому критерию соединения. Вот СУБД и выдает несколько записей. Почему "дублируется"? Что попросили, то и получили. Соглашусь с коллегой (2), для отладки удобно поделить на несколько запросов, потом можно обратно вернуть в один, если это зачем-то нужно.
(5) ну последнее условие очевидно отладочное. Я тоже так делаю, главное не забыть это стереть, когда записываешь в рабочую базу.
Про остальное что мы можем сказать, не зная ни задачи, ни структуры базы? Человек, которые пользуется правыми соединениями, вряд ли не знает, какие таблицы ему нужны. Все же это довольно глубокое погружение в sql.
Про остальное что мы можем сказать, не зная ни задачи, ни структуры базы? Человек, которые пользуется правыми соединениями, вряд ли не знает, какие таблицы ему нужны. Все же это довольно глубокое погружение в sql.
(3) (2) Большое спасибо, благодаря совету выяснил в чем ошибка.
Использую right join, чтобы вытащить все блоки по которым выполнялся распил. Можно было бы присоединять РегистрСведений.Блоки к РегистрСведений.Распилы, чтобы использовать left join, но почему то решил, так оставить, ведь работало же, пока не нужно было изменять отчет)
p.s. слышал, что использование right join плохая практика, но выяснял почему
Использую right join, чтобы вытащить все блоки по которым выполнялся распил. Можно было бы присоединять РегистрСведений.Блоки к РегистрСведений.Распилы, чтобы использовать left join, но почему то решил, так оставить, ведь работало же, пока не нужно было изменять отчет)
p.s. слышал, что использование right join плохая практика, но выяснял почему
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот