|
|
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
вопрос таков, есть таблица со служащими , каждый служащий знает языки , те связь 1:N и гдето учился , те также связь 1:N надо в одном отчете выдать служащего , все его языки и специальности если писать select * from EMP, LANG, CERT ... то получаем декартово произведение lang на cert ... можно этого както избежать или придеться делать два запроса,(sql который проверяет выбирать ли служащего достаточно сложный и не хотелось бы его повторять по нескоьку раз ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 19:13 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
-- и гдето учился , те также связь 1:N Это связь между служащим и местом образования? или между языком и местом образования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 19:54 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
select * from EMP left join LANG on EMP_SysNo = LANG_EMPRef left join CERT on EMP_SysNo = CERT_EMPRef where EMP_ .... и накладываеться условие на EMP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 20:06 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 20:56 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
как работать с курсором, не могли бы вы дать ссылку где почитать ? чтото подобное в сайбейсе есть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 21:08 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 23:52 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
"есть таблица со служащими , каждый служащий знает языки , те связь 1:N " Хочу обратить внимание если 1:N имеется ввиду, что связь "один ко многим" - то это не правильно. В данном случае есть связь "многие ко мнногим". Что собственно означает: один человек значет несколько языков, одним языком могут владеть много людей. Вот так на начальном этапе смоделируют неправильно, а потом мучаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 09:11 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
>>Вот так на начальном этапе смоделируют неправильно, а потом мучаются. и как же по вашему надо было смоделировать правильно , я согласен что связь многие ко многим, но на построение запроса это никак не влияло .... хм, я так считал.. если ошибаюсь поправьте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 10:21 |
|
||
|
sql запрос при связях 1:N
|
|||
|---|---|---|---|
|
#18+
LANG и CERT -- это связущие таблички для N:N ? То есть с записями типа { emp_id, lang_id }? Тогда примерно так: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 00:59 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2780&tid=1990625]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 382ms |

| 0 / 0 |
