Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-51308
Samael6
2003-10-06 12:27
2003.10.16
Пакеры


1-51341
Gero
2003-10-05 10:38
2003.10.16
Подсветка синтаксиса


1-51220
Magisimus
2003-09-30 19:56
2003.10.16
Как проверить существует ли компонент, по handl у?


1-51326
ss300
2003-10-06 07:23
2003.10.16
Удаление строки в текстовом файле


1-51334
Islander
2003-10-05 11:42
2003.10.16
Компонент на основе TTreeView. Переопределение OnEdited





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский