|
|
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
есть две таблицы - таблица людей PERSON - и таблица образования EDUCATION - связь один ко многим - так как у одного человека может быть несколько образований (связаны таблицы по полю PERSON_ID). Как создать запрос который бы выбирал только тех людей у которых есть и ЭТО образование и ЭТо образование??? то есть типа SELECT PERSON_ID FROM EDUCATION WHERE PERSON_EDUCATION = 'высшее' AND PERSON_EDUCATION = 'среднее' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 11:04 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
Должна быть уникальность пар PESON_ID - PERSON_EDUCATION, или можно и без нее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 11:44 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
На самом деле есть много способов, различных по оптимизации. Можно так, например: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 11:56 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
Кажись я по утреннему стормозил Этот запрос вернёт людей с 2-мя средними образованиями, к примеру, если такое чудо возможно Поэтому надо написать так: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 12:00 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
Это, что ли? create table person(id numeric,name varchar(32)); create table education (id_person numeric, name varchar(32)); insert into person values(1,'vasya'); insert into person values(2,'petya'); insert into person values(3,'vanya'); insert into education values(1,'high school'); insert into education values(1,'interbase dba'); insert into education values(2,'college'); commit; select person.name,education.name from person left join education on person.id=education.id_person; NAME NAME1 ==================== ================== vasya high school vasya interbase dba petya college vanya <null> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 13:28 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 16:35 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
2Johnmen : ;) Двойка Вам, уважаемый... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 16:39 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
>Могун Если за опечатку в имени тбл, то действительно весело :) Если нет, то поясни... Просто интересно. Т.к. запрос абсолютно верен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 01:41 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
Johnmen Этот запрос в корне не верен потому как он вернет тех людей у которых есть или среднее или высшее образование а надо чтобы и среднее и высшее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 08:16 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
Присоединяюсь к Yegoriy относительно постинга Johnmen. 2Johnmen: Вас запрос верен лишь синтаксически, но не решает поставленной задачи, а раз задача не решена, то ответ не верен. Тем более тот, кто задал вопрос, изначально так и писал(за исключением DISTINCT), но это не явилось решением задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 09:53 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
А разве можно иметь высшее образование, не имея среднего? Т.е. любая степень образования должна включать в себя "нижние". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 13:51 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
2 S.G. Может: 1) техникум + вуз; 2) пту + вуз; 3) цпш + вуз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 14:50 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
S.G В принципе конечно нельзя иметь высшее образование не имея допустим начального - но можно иметь несколько специальных, или несколько высших ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 14:51 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
В принципе, здесь должна быть связь многих ко многим поскольку одно и то же образование могут иметь несколько людей. Поэтому нужна еще одна таблица ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 15:27 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
to Void! Я придерживаюсь такого же мнения. "Персона" и "Образование" есть две разные сущности, которые могут существовать независимо друг от друга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 15:35 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
>Могун >Yegoriy Каков вопрос, таков и ответ :) Если опустить все приведенные здесь соображения по поводу такой сущности, как "образование", и подойти чисто формально и утилитарно, то слегка подправив <Могун>, получим : SELECT DISTINCT E.PERSON_ID FROM EDUCATION E WHERE (EXISTS (SELECT * FROM EDUCATION E1 WHERE E1.PERSON_ID=E.PERSON_ID AND E1.PERSON_EDUCATION='высшее')) AND (EXISTS (SELECT * FROM EDUCATION E2 WHERE E2.PERSON_ID=E.PERSON_ID AND E2.PERSON_EDUCATION='среднее')) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:12 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
2Johnmen: Вопрос как раз довольно внятный, а править меня не надо... Я и так хорош ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:33 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
>Могун >Вопрос как раз довольно внятный,... Ага. Показывает недочеты при проектировании. >...а править меня не надо... Извини, я думал правлю твой пост. А тут вон что :) >Я и так хорош Возможно. Не видел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 00:17 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
На самом деле - таблицы три - Person, Person_Education, Education_Type так что на самом деле связь все таки один ко многим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 07:28 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
>Yegoriy >На самом деле - таблицы три - Person, Person_Education, Education_Type так что на самом деле связь все таки один ко многим Так может все таки "много-ко-многим" ? С уважением, Denis Uskov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 14:09 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
Denis Uskov Нет, связь один ко многим так как таблицы PERSON и PERSON_EDUCATION связаны по полю PERSON_ID в таблице PERSON информация о людях в таблице PERSON_EDUCATION информация об образовании т.е. что закончил, когда закончил, и т. п. одна запись из PERSON связана со многими из PERSON_EDUCATION. А уж потом таблица PERSON_EDUCATION связана с таблицей EDUCATION_TYPE по полю EDUCATION_TYPE_ID, в таблице EDUCATION_TYPE (по сути она справочник) хранятся типы образований которых кстати около 20-ти соответствуя ОКИН. C уважением, Yegoriy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 08:20 |
|
||
|
связь один ко многим
|
|||
|---|---|---|---|
|
#18+
>Yegoriy Всетаки связь между таблицами PERSON и EDUCATION многие-ко-многим организованая через э...промежуточную таблицу PERSON_EDUCATION. Кстати начинать свой вопрос стоило с того что у вас 3 таблици а не 2. Немного поправив Johnmen: SELECT P.PERSON_ID FROM PERSON P WHERE (EXISTS (SELECT * FROM PERSON_EDUCATION PE1, EDUCATION_TYPE ET1 WHERE (P.PERSON_ID=PE1.PERSON_ID) AND (PE1.EDUCATION_ID=ET1.EDUCATION_ID) AND (ET1.EDUCATION='высшее'))) and (EXISTS (SELECT * FROM PERSON_EDUCATION PE2, EDUCATION_TYPE ET2 WHERE (P.PERSON_ID=PE2.PERSON_ID) AND (PE2.EDUCATION_ID=ET2.EDUCATION_ID) AND (ET2.EDUCATION='среднее'))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2003, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32333375&tid=1579571]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 478ms |

| 0 / 0 |
