Форум: "Базы";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизПрикрепление таблицы (JOIN) Найти похожие ветки
← →
Draught © (2004-10-18 09:39) [0]повторное прикрепление таблицы
есть вот такой вот запрос:select id_doc,id_feld,sotr.doc_name,sotr.feld_name, street.name as street_name,nas.name as nas_name
from kart
inner join street on akart.id_street=street.id_street
inner join nas on street.id_nas=nas.id_nas
inner join sotr on akart.id_doc=sotr.id_sotr
inner join sotr on akart.id_feld=sotr.id_sotr
сразу скажу, что он не работет (работает только без последней строки), но поидее, как я понимаю, все должно быть именно так, хотя может кто-то не согласен. Если убрать последнюю строку кода, то все работает, но поля sotr.doc_name и sotr.feld.name имеют одинковые значения, хотядолжны зависеть от id_doc и id_feld
вообщем-то это часть запроса, на самом деле выборка делается порядка 20 полей из БД и делается куча прикреплений других таблиц, но ошибка возникает только в том случае, когда прикрепляется второй раз одна и та же таблица.
Вкратце опишу, что тут имеется: выбираются из базы данных карты, в каждой карте указано несколько сотрудников, в результате я получаю СТРОКУ таблицы - карту, в которой указывается много-много всего и несколько сотрудников, точнее уникальный номер каждого сотрудника, ну и мне требуется видеть не номер, а само имя...
← →
Draught © (2004-10-18 09:42) [1]да, еще немного добавлю... ошибка возникает из-за того, что дважды используется имя прикрепляемой таблицы, собственно требуется либо его как-то заменить на другое, либо использовать его один раз и прикреплять несколько полей...
← →
Draught © (2004-10-18 09:49) [2]Мля... еще у себя ошибку увидел...
в самом скрипте должно быть не sotr.doc_name и sotr.feld.name, а просто 2 раза sotr.sotr_name. Сорри, просто торопился сильно, не зметил при написании поста...
← →
ЮЮ © (2004-10-18 09:55) [3]Надо назначить алиас:
inner join sotr on akart.id_doc=sotr.id_sotr
inner join sotr sotr1 on akart.id_feld=sotr1.id_sotr
← →
Draught © (2004-10-18 10:06) [4]Так, еще появилось небольшое подозрение... я выбираю дважды одно и то же поле, значит у меня всегда будет одно и то же... т.е. поля sotr.sotr_name вообще не нужны??? Нужно как-то join 2 раза сделать
← →
Johnmen © (2004-10-18 10:20) [5]>я выбираю дважды одно и то же поле
Где ? Какое ?
>у меня всегда будет одно и то же
Что ? Где ?
>поля sotr.sotr_name вообще не нужны
Для чего ? Их несколько ?
>Нужно как-то join 2 раза сделать
Так ЮЮ [3] уже сказал...
← →
Draught © (2004-10-18 10:22) [6]
> Johnmen ©
да, именно 3 пост немного разъясняет...
← →
Draught © (2004-10-18 10:23) [7]
> Johnmen ©
т.е. 2 пост
← →
Johnmen © (2004-10-18 10:28) [8]sotr.sotr_name и sotr1.sotr_name - это два разных имени сотра...:)
← →
ЮЮ © (2004-10-18 10:34) [9]Одноименным полям тожно можно довать алиасы
SELECT sotr.sotr_name, sotr1.sotr_name AS sotr1_name
← →
Draught © (2004-10-18 10:49) [10]
> Johnmen © (18.10.04 10:28) [8]
> sotr.sotr_name и sotr1.sotr_name - это два разных имени
> сотра...:)
Ну это вариант предложеный > ЮЮ ©
СЕНКС!!!
ВСЕ ПОЛУЧИЛОСЬ!!!
ЗАПРОС ИМЕЕТ ОКОНЧАТЕЛЬНЫЙ ВИД:select id_doc,id_feld,id_san,id_vod,sotr.id_sotr,sotr1.id_sotr,sotr2.id_sotr, sotr3.id_sotr, street.name as street_name,nas.name as nas_name
from akart
inner join street on akart.id_street=street.id_street
inner join nas on street.id_nas=nas.id_nas
inner join sotr on akart.id_doc=sotr.id_sotr
inner join sotr sotr1 on akart.id_feld=sotr1.id_sotr
inner join sotr sotr2 on akart.id_san=sotr2.id_sotr
inner join sotr sotr3 on akart.id_vod=sotr3.id_sotr
тока теперь проблемка следующая... не все записи выводятся, если хотя бы один из сотрудников отсутствует, то запись не выводится...
← →
Johnmen © (2004-10-18 10:50) [11]LEFT JOIN
← →
Draught © (2004-10-18 11:00) [12]
> Johnmen © (18.10.04 10:50) [11]
> LEFT JOIN
А ведь точно же... сенкс
select id_doc,id_feld,id_san,id_vod,sotr.id_sotr,sotr1.id_sotr,sotr2.id_sotr, sotr3.id_sotr, street.name as street_name,nas.name as nas_name
from akart
inner join street on akart.id_street=street.id_street
inner join nas on street.id_nas=nas.id_nas
left join sotr on akart.id_doc=sotr.id_sotr
left join sotr sotr1 on akart.id_feld=sotr1.id_sotr
left join sotr sotr2 on akart.id_san=sotr2.id_sotr
left join sotr sotr3 on akart.id_vod=sotr3.id_sotr
← →
ЮЮ © (2004-10-18 11:06) [13]тольк на кой быдо четыреждв связывать с sotr, если не одного поля из них не взято ?
sotr.id_sotr,sotr1.id_sotr,sotr2.id_sotr, sotr3.id_sotr - не считаются всилу akart.id_doc=sotr.id_sotr, ...
← →
Draught © (2004-10-18 11:24) [14]
> ЮЮ © (18.10.04 11:06) [13]
> тольк на кой быдо четыреждв связывать с sotr, если не одного
> поля из них не взято ?
Да, верное замечание... просто тут не весь запрос, счас покажу весь:select nomer,vp,fam_b,ima_b,otch_b,vozr,fam_c,id_povod,id_diag,extr,povt,dom,pod,etag,kod,korp,kv,komn,time_oper,time_disp,time _prib,time_ret,pol,pered,id_brig,oper_suid,disp_suid,result_suid,prim,gsp,vid,mesto,travm,result,death,drunk,gosp,id_bol n,id_diag1,id_diag2,id_diag3,osl1,osl2,man1,man2,man3,man4,man5,exp,poput,filial.name,street.name as street_name,nas.name as nas_name,
rtrim(sotr.fam)+" "+rtrim(sotr.ima) + " " + rtrim(sotr.otch) as fio_doc,
rtrim(sotr1.fam)+" "+rtrim(sotr1.ima) + " " + rtrim(sotr1.otch) as fio_feld,
rtrim(sotr2.fam)+" "+rtrim(sotr2.ima) + " " + rtrim(sotr2.otch) as fio_san,
rtrim(sotr3.fam)+" "+rtrim(sotr3.ima) + " " + rtrim(sotr3.otch) as fio_vod
from akart
inner join street on akart.id_street=street.id_street
inner join nas on street.id_nas=nas.id_nas
left join filial on akart.id_filial=filial.id_filial
left join sotr on akart.id_doc=sotr.id_sotr
left join sotr sotr1 on akart.id_feld=sotr1.id_sotr
left join sotr sotr2 on akart.id_san=sotr2.id_sotr
left join sotr sotr3 on akart.id_vod=sotr3.id_sotr
Ну здесь он тоже не весь, но жумаю, что ответ исчерпывающий... )))))))))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.052 c