![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите с запросом
snake1977 © (2004-07-12 16:05:00)Здравствуйте!! подскажите ктонибудь, есть три таблицы, связаны один к одному, но у подчиненых таблиц может не быть записи связанной с главной таблицей. если делать запрос :
select t.*,p.*,r.* from table1 t, table2 p, table3 r
where p.idRec=t.id and r.idRec=t.id
то в результирующем запросе будут только те записи из таблицы table 1, для которых есть данные в таблицах, Table2 и Table3.
А как сделать запрос чтоб если в подчиненных таблицах нет записи , то запись выбиралась но в полях из подчиненой таблицы было бы пусто.
Курдль (2004-07-13 09:44:00) [1]прим. чтиать "внешний ключ", как "первичный ключ + внешний ключ"
Курдль (2004-07-13 09:41:00) [2]
> snake1977 (13.07.04 08:32) [10]
На будущее (наверняка Вы не последний раз на этом форуме, поэтому лучше говорить на одном языке).
Из "схемотехники" БД:
Виды связи "один-к-одному":
ENTITY_1 -o------------o- ENTITY_2(обе не обязятельны)
ENTITY_1 -+------------+- ENTITY_2(обе обязятельны)
Скорее всего это Ваш случай, когда сущность1 имеет внешний ключ от сущности2 и при этом запись в ней не обязятельно есть для любой записи сущности2:
ENTITY_1 -|>-о---------+- ENTITY_2(зависимая связь DEPENDED)
ENTITY_1 -|)------------> ENTITY_2(наследственная связь INHERITED. Физически реализуется так же, как и зависимая)
snake1977 (2004-07-13 08:32:00) [3]на сколько я понимаю связь один к одному и связь один ко многим совсем не подразумевает обязательное наличие в дочерней таблице записи. если один к одному то подчиненная запись должна быть единственной , если один ко многим то может быть множество записей. Хотя может уже и ввели другие понятия :)
но это все лирическое отступление :)
огромное спасибо stud © , ибо он сразу понял в чем заключается вопрос ибез всяких лирик, просто ответил :) (еспешиали фо Курдль, эх... демагогия великая весч ;) )
Курдль (2004-07-12 17:51:00) [4]
> Johnmen © (12.07.04 17:46) [8]
> Вот автору зачем ?
Можно было бы предположить, что именно за этим, если бы не: "
> А как сделать запрос чтоб если в подчиненных таблицах нет
> записи , то запись выбиралась но в полях из подчиненой таблицы
> было бы пусто.
"
Johnmen (2004-07-12 17:46:00) [5]>Курдль © (12.07.04 17:40) [7]
Это понятно.
Вот автору зачем ?
Курдль (2004-07-12 17:40:00) [6]
> Johnmen © (12.07.04 17:33) [6]
> Но если они реально 1-1, спрашивается, зачем
> городить 3 табл. вместо 1 ?
Есть вариант - если они INHERITANCE REFERENSED, но это так и называется.
Типа есть базовая сущность ДОКУМЕНТЫ с ПК ДОК_ИД.
А есть наследственные сущности: ПЛАТЕЖНЫЕ_ДОКУМЕНТЫ с тем же ДОК_ИД, и ДОГОВОРЫ все с тем же ДОК_ИД.
Johnmen (2004-07-12 17:33:00) [7]>snake1977 (12.07.04 16:27) [5]
>если кто нибудь назовет такую связь один ко многим, то пусть первый кинет в меня камень :)
Что молчишь ? Уже поймал ?
>есть три таблицы, связаны один к одному, но у подчиненыхтаблиц
Значит, 1-М. Но если они реально1-1, спрашивается, зачем городить 3 табл. вместо 1 ?
snake1977 (2004-07-12 16:27:00) [8]>> еспешиали фо Курдль
если кто нибудь назовет такую связь один ко многим, то пусть первый кинет в меня камень :)
Курдль (2004-07-12 16:13:00) [9]
> есть три таблицы, связаны один к одному, но у подчиненых
> таблиц
Это нонсенс! Уж либо "один-к-одному", либо "начальники-подчиненные" :)
Соловьев (2004-07-12 16:12:00) [10]
> убери where
cartesian product - говорит о чем-то? :)
MORA (2004-07-12 16:09:00) [11]убери where
stud (2004-07-12 16:07:00) [12]outer join например.
select t.*,p.*,r.* from table1
left outer join table2 on (table1.id=table2.id)
left outer join table3 on (table1.id=table3.id)
where p.idRec=t.id and r.idRec=t.id