powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql запрос при связях 1:N
9 сообщений из 9, страница 1 из 1
sql запрос при связях 1:N
    #32156459
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос таков,
есть таблица со служащими , каждый служащий
знает языки , те связь 1:N
и гдето учился , те также связь 1:N

надо в одном отчете выдать служащего , все его языки и специальности
если писать
select * from EMP, LANG, CERT
...

то получаем декартово произведение
lang на cert ...

можно этого както избежать или придеться делать два запроса,(sql который проверяет выбирать ли служащего достаточно сложный и не хотелось бы его повторять по нескоьку раз )
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32156481
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-- и гдето учился , те также связь 1:N
Это связь между служащим и местом образования?
или между языком и местом образования
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32156487
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from EMP left join LANG on EMP_SysNo = LANG_EMPRef
left join CERT on EMP_SysNo = CERT_EMPRef
where
EMP_ .... и накладываеться условие на EMP
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32156498
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
One possibility would be:

SELECT ename,
cursor (select language from lang l where l.empno = e.empno),
cursor (select school from cert c where c.empno = e.empno)
FROM emp e
/

SY.
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32156501
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как работать с курсором, не могли бы вы дать ссылку где почитать ?
чтото подобное в сайбейсе есть ?
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32156528
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I do not have much SYBASE, maybe someone else could answer that part of your question. Cusror expressions are supported in SQL*Plus, however output looks ugly (as an example I will use scott/tiger emp and dept tables):

SQL> select dname,cursor (select ename from emp e where e.deptno = d.deptno) as elist from dept d;

DNAME ELIST
-------------- --------------------
ACCOUNTING CURSOR STATEMENT : 2

CURSOR STATEMENT : 2

ENAME
----------
CLARK
KING
MILLER

RESEARCH CURSOR STATEMENT : 2

CURSOR STATEMENT : 2

ENAME
----------
SMITH
JONES
SCOTT
ADAMS
FORD

SALES CURSOR STATEMENT : 2

CURSOR STATEMENT : 2

ENAME
----------
ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES

6 rows selected.

OPERATIONS CURSOR STATEMENT : 2

CURSOR STATEMENT : 2

no rows selected

In PL/SQL cursor expressions are available only in 9i, and even in 9i they can not be used in FOR CURSOR loops. When fetching from such select, cursor is returned as a cursor variable (REF CURSOR):

SQL> set serveroutput on format wrapped
SQL> declare TYPE refcurtype IS REF CURSOR;
2 v_refcur refcurtype;
3 v_dname dept.dname%type;
4 v_ename emp.ename%type;
5 cursor cur
6 is
7 select dname,
8 cursor (select ename from emp e where e.deptno = d.deptno)
9 from dept d;
10 begin
11 open cur;
12 loop
13 fetch cur into v_dname,v_refcur;
14 exit when cur%notfound;
15 dbms_output.put_line(v_dname || ' department employes:');
16 loop
17 fetch v_refcur into v_ename;
18 exit when v_refcur%notfound;
19 dbms_output.put_line(' ' || v_ename);
20 end loop;
21 end loop;
22 close cur;
23 end;
24 /
ACCOUNTING department employes:
CLARK
KING
MILLER
RESEARCH department employes:
SMITH
JONES
SCOTT
ADAMS
FORD
SALES department employes:
ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES
OPERATIONS department employes:

PL/SQL procedure successfully completed.

Oracle docs do not have much info on cursor expressions, just bits here and there in SQL Reference, PL/SQL User's Guide, Performance Tuning, Application Developer's Guide).

SY.
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32157126
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"есть таблица со служащими , каждый служащий
знает языки , те связь 1:N "

Хочу обратить внимание если 1:N имеется ввиду, что связь "один ко многим" - то это не правильно. В данном случае есть связь "многие ко мнногим". Что собственно означает: один человек значет несколько языков, одним языком могут владеть много людей.

Вот так на начальном этапе смоделируют неправильно, а потом мучаются.
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32157180
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Вот так на начальном этапе смоделируют неправильно, а потом мучаются.
и как же по вашему надо было смоделировать правильно ,

я согласен что связь многие ко многим, но на построение запроса это никак не влияло .... хм, я так считал.. если ошибаюсь поправьте
...
Рейтинг: 0 / 0
sql запрос при связях 1:N
    #32158064
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LANG и CERT -- это связущие таблички для N:N ? То есть с записями типа { emp_id, lang_id }?

Тогда примерно так:
Код: plaintext
1.
2.
3.
4.
select E.*, LL.*, CL.* from EMP E , LANG L, LANG_LIST LL, CERT C, CERT_LIST CL
where 
 E.emp_id = L.emp_id (+) and L.lang_id=LL.lang_id and
 E.emp_id = C.emp_id (+) and C.cert_id=CL.cert_id
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql запрос при связях 1:N
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]