Здравствуйте, мне нужна помощь по Sql

программирование sql

Есть программа для расчета окон и дверей из пластика и алюминия. Программа работает на Firebird 1.5, в программе есть возможность выгрузки информации из базы путем sql запроса к ней. Я сам знаю запросы на простом уровне, но тут вылезла задача которую сам не смог решить. Я обратился за помощью и мне прислали такой запрос:


select
c.agreementno as ORDERID,
oi.name,
i1.modelno,
g1.marking,
i1.thick,
i1.ang1,
i1.ang2,
i1.izdpart,
i1.partside,
i1.qty,
i1.connection1 as tip_izd,


case g2.marking
when '-' then ''
else g2.marking
end markingsteel,

case gg2.name
when '-' then ''
else gg2.name
end ggnamesteel,

case i2.thick
when 1 then '-'
else i2.thick
end
thicksteel
from
orderitems oi

right join itemsdetail i1 on (oi.orderitemsid=i1.orderitemsid)
right join itemsdetail i2 on (oi.orderitemsid=i2.orderitemsid)
join groupgoods gg1 on (i1.grgoodsid=gg1.grgoodsid)
join groupgoods gg2 on (i2.grgoodsid=gg2.grgoodsid)
join goods g1 on (i1.goodsid=g1.goodsid)
join goods g2 on (i2.goodsid=g2.goodsid)
join orders c on (oi.orderid=c.orderid)
join dirdates e on (c.orderid=e.orderid)
join diractions f on (e.diractionsid=f.diractionsid)
where


gg1.ggtypeid in (1,6) and
gg2.ggtypeid=2 and
i1.partside=i2.partside and
i1.izdpart=i2.izdpart and
i1.modelno=i2.modelno and
i1.orderitemsid= i2.orderitemsid and
oi.ORDERID=c.ORDERID and

c.deleted is null and
f.name='050. СНАБЖЕНИЕ' and
e.FACT_DATE is null and
c.agreementno<>''


Запрос работает, но пока в базе не больше 5 заказов. Как только заказов становится больше, то программа виснет и если я напрямую к базе кидаю этот запрос, например через IBExpert, то он тоже виснет. Пробовал на компьютерах разной конфигурации. Может кто знает как можно этот запрос оптимизировать или по другому написать.
Ответы:
Структура базы не известна. Постановка задачи не известна. Запрос страшный, буков много. И что Вы хотите, странный человек?
И не виснет, а долго выполняется, например из-за умножения множеств, т.е. когда делается join без ограничивающего условия.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.