Ошибка в sql запросе

1. user1671936 1 23.08.24 09:18 Сейчас в теме
Здравствуйте, коллеги. Помогите, пожалуйста, разобраться с запросом. Есть запрос sql
sel ect
	productProduct.default_code "Код номенклатуры",
	promTable.def_code "Код комплектующего",
    productProduct.desc_product_name "Номенклатура",
	coalesce(round(productProduct.lst_price * 1.2, 3), 0) "Цена",
	coalesce(promTable.value, 0) "Себестоимость комплектующего"
from 
	product_product productProduct
left join 
	product_template productTemplate
on
	productTemplate.id = productProduct.product_tmpl_id
left join
	product_category productCategory
on
	productCategory.id = productTemplate.categ_id
left join
	product_category prCategory
on
	prCategory.id = productCategory.parent_id
--------комплектующие
left join(sel ect 
	prod.default_code "default_code",
	prod.id "prod_id",
	mbl.product_id "p_id",
	product.default_code "def_code",
	prop.prid "prid",
	prop.value "value"
from 
	mrp_bom_line mbl 
inner join
	product_product pp 
on
	mbl.product_id = pp.id 
inner join 
	mrp_bom mb 
on
	mb.id = mbl.bom_id 
inner join 
	product_product prod 
on
	mb.product_id = prod.id
inner join 
	product_product product 
on 
	mbl.product_id = product.id
left join  
	(select
	to_number(split_part(ip.res_id, ',', 2), 'L9G999g999.99') "prid",
	ip.value_float "value"
fr om 
	ir_property ip
inner join (select
	to_number(split_part(ip.res_id, ',', 2), 'L9G999g999.99') "prod_id",
	max(ip.write_date) "write_date" 
fr om 
	ir_property ip
group by 
	to_number(split_part(ip.res_id, ',', 2), 'L9G999g999.99')) tempTable 
on 
	ip.write_date = tempTable.write_date
and 
	to_number(split_part(ip.res_id, ',', 2), 'L9G999g999.99') = tempTable.prod_id) prop 
on  
	mbl.product_id = prop.prid
) promTable
on
	productProduct.id = promTable.prod_id
Показать
и при выполнении он зависает, и нагружает всю базу (приходится закрывать процесс). Проблема происходит при выводе поля
coalesce(promTable.value, 0) "Себестоимость комплектующего"
. Просто соединив две таблицы запрос выполняется нормально, стоит добавить на вывод это поле - все зависает. Подскажите, пожалуйста, в чем ошибка?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 23.08.24 12:41 Сейчас в теме
А когда это в тегнутый MS SQL to_number и split_part завезли?
3. user1671936 1 23.08.24 13:01 Сейчас в теме
(2) это postgresql, неправильно описание сделал
4. user1671936 1 23.08.24 13:06 Сейчас в теме
попробовал две таблицы сделать, в одной цены товаров, в другой цены комплектующих, и соединение через айди товара, так же зависает. В общем если выводить только одно поле, то все ок (например цену товара или цену комплектующих), если выводить оба поля то зависает. Видимо проблема в разном количестве записей. Если делать без соединения со стоимостью комплектующих, то выводится 10790 строк, если сделать левое соединение то выводится 10320. Не очень понятно, куда исчезают 470 строк.
5. user1880116 23.08.24 13:23 Сейчас в теме
(3)
это postgresql
У постгри с вложенными запросами весьма трепетные отношения. Переписывай на времянки, ставь индексы.
Оставьте свое сообщение

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