Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.04 c
14-1098795070
vidiv
2004-10-26 16:51
2004.11.14
Помогите пожалуйста перевести на си


1-1098907717
Jolik
2004-10-28 00:08
2004.11.14
Как сделать в TListView...


1-1099116369
SSSdd
2004-10-30 10:06
2004.11.14
Как подсчитать время прошедшее между двумя датами?


14-1098870383
Tor
2004-10-27 13:46
2004.11.14
Установка Apollo SQL 6.0


1-1099401614
~Shaman~
2004-11-02 16:20
2004.11.14
работа со строками





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский