Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

Прикрепление таблицы (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.05 c
14-1098912615
хм
2004-10-28 01:30
2004.11.14
как же больно


1-1099404621
Kraj
2004-11-02 17:10
2004.11.14
ICQ


14-1098776503
ИМХО
2004-10-26 11:41
2004.11.14
Проиграть DVD на CD-ROM-е


4-1096986888
programania
2004-10-05 18:34
2004.11.14
Изменение кода при выполнении программы


9-1090281375
Gun
2004-07-20 03:56
2004.11.14
SIN