Форум: "Базы";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Вниз
LEFT JOIN Найти похожие ветки
← →
MsGuns (2003-09-25 20:42) [0]Есть запрос:
SELECT F.fdid, M.mname, M.mizm, F.fcost, F.fqtt, N.ndate, N.nnum,
NM.pmqtt+NM.pmbrakq as qnout, CAST (0 AS DECIMAL(15,2)) as qnrest
FROM inv_fct F, mtr M, nout_pm NM, nout_pn NN, nout_p NP, nout N
WHERE (M.mid=F.mid) and (F.iid=:piid) and (NM.fdid=F.fdid)
and (NM.npnid=NN.npnid) and (NN.npid=NP.npid)
and (NP.nid=N.nid)
ORDER BY mname, fdid, ndate, nnum
inv_fct - фактура прихода
mtr - справочник материалов
nout - отгрузка (заголовки)
nout_p - состав огружаемых изделий
nout_pn - расклад материала на ед.изделия
nout_pm - фактический расход материала в отгрузке
Запрос имеет один недостаток - не выводит те материалы прихода, по которым не было отгрузок, а НАДО !!!
Ну вот не умею я еще пользоваться JOIN`ами ;`<... Все мои потуги с этим запросом пока ни к чему не привели.
Мужики, переделайте эту байду на джоин. Офигенно виртуально проставлюсь
← →
Sergey_Masloff (2003-09-25 22:15) [1]SELECT F.fdid, M.mname, M.mizm, F.fcost, F.fqtt, N.ndate, N.nnum,
NM.pmqtt+NM.pmbrakq as qnout, CAST (0 AS DECIMAL(15,2)) as qnrest
FROM
((((inv_fct F left join mtr M on M.mid=F.mid)
left join nout_pm NM on NM.fdid=F.fdid)
left join nout_pn NN on NM.npnid=NN.npnid)
left join nout_p NP on NP.npid=NN.npid)
left join nout N on N.nid = NP.nid
WHERE F.iid=:piid
ORDER BY mname, fdid, ndate, nnum
Серег, я не вникая втупую переписал но что-то в этом роде. Когда ты пишешь and (NP.nid=N.nid) это у тебя получается закрытый джойн то есть берутся записи из левой таблицы и к ним присобачиваются по строгому соответствию из правой. Если left join то попадают и записи из левой таблицы которым нет соответствия в правой (NULL то есть). Но открытый джойн операция ИМХО накладная так что где строгое соответствие ты лучше лефт на иннер замени. И еще - в интербазе по умолчанию джойн открытый вроде то есть лефт джойн это тоже что left outer join так вот я всегда пишу в полной форме потому что работаю не только и не столько с ИБ а в других серверах оно бывает по другому. Может будет полезно.
P.S. Если что я не так написал скажи посмотрю повнимательнее. Но вроде все так?
← →
Sergey_Masloff (2003-09-25 22:22) [2]MsGuns ©
еще замечание. В ордер бай тоже алиасы напиши, вроде как-то наступал я на грабли что не работало так как у тебя без алиасов хотя имена полей не дублировались в соединяемых таблицах.
И еще условие where можно тоже в условие джойн вписать
inv_fct F left join mtr M on (M.mid=F.mid) and (F.iid=:piid)
но я так не очень люблю...
← →
Johnmen (2003-09-26 09:47) [3]
SELECT F.fdid, M.mname, M.mizm, F.fcost, F.fqtt, N.ndate, N.nnum,
NM.pmqtt+NM.pmbrakq as qnout, CAST (0 AS DECIMAL(15,2)) as qnrest
FROM inv_fct F, mtr M, nout_pm NM, nout_pn NN, nout_p NP
LEFT JOIN nout N ON NP.nid=N.nid
WHERE (M.mid=F.mid) and (F.iid=:piid) and (NM.fdid=F.fdid)
and (NM.npnid=NN.npnid) and (NN.npid=NP.npid)
ORDER BY mname, fdid, ndate, nnum
← →
MsGuns (2003-09-26 13:26) [4]>Sergey_Masloff (25.09.03 22:22) [2]
Все сработало ! Правда, детально еще не проверил (не пересчитал на калькуляторе, блин), но, похоже, что все O`k
С алиасами я в курсах, просто иногда не указываю, но знаю, что надо, хотя бы для читабельности.
Про схему увязки "соединенных" источников в запросах я прочитал несколько статей, не говоря уж о хэлпах, но все такими убогими примерами ;((. Твой запрос очень поучительный ;))
>Johnmen © (26.09.03 09:47) [3]
Твой запрос, ИМХО, текстуально ближе к оригиналу, хотя и не читается так легко, как у Сергея. Тоже дал положительный результат ;))
Ребятки, спасибо огроменное. Выставляюсь:
---------
( )
( )
( )
( )
( )
( )
/ \
/_____\
← →
MsGuns (2003-09-26 13:40) [5]Блин, перекосо....ло все ! Ну бум считать, что оно аж выливается, а что она как бы лопается от кол-ва налитого ;)))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c