2012-11-24 4 views
0

나는이 쿼리를 수행하려고 시도했다. 스페인에있는 병원 중 2 명이 넘는 의사에게만 근무하는 병원의 이름은 무엇인가? 그러나 그 결과는 내가 기대했던 것이 아닙니다.SQL DML Oracle 쿼리

CREATE TABLE Hospital (
    hid INT PRIMARY KEY, 
    name VARCHAR(127) UNIQUE, 
    country VARCHAR(127), 
    area INT 
); 
CREATE TABLE Doctor (
    ic INT PRIMARY KEY, 
    name VARCHAR(127), 
    date_of_birth INT, 
); 
CREATE TABLE Work (
    hid INT, 
    ic INT, 
    since INT, 
    FOREIGN KEY (hid) REFERENCES Hospital (hid), 
    FOREIGN KEY (ic) REFERENCES Doctor (ic), 
    PRIMARY KEY (hid,ic) 
); 

내가이 함께 노력 :

SELECT DISTINCT H.name 
FROM Doctor D, Work W, Hospital H 
WHERE D.bi = W.bi AND H.country = 'Spain' AND H.hid = W.hid AND W.ic = D.ic 
AND NOT EXISTS(
       SELECT * 
       FROM Hospital H2 
       WHERE H2.hid = W.hid 
) 
GROUP BY (H.name) 
HAVING COUNT(D.ic) > 2 
;  

감사

나는이 테이블을 가지고있다.

답변

1

귀하가 2 명 이상의 헌신적 인 의사가있는 병원을 의미한다고 가정 할 때 귀하에게 도움이 될 것입니다.

SQL> select * from hospital; 

     HID NAME     COUNTRY   AREA 
---------- -------------------- ------------ ---------- 
     1 General    Spain     1 
     2 Hospital 2   Spain     1 
     3 Hospital 3   Spain     1 

SQL> select * from doctor; 

     IC NAME     DATE_OF_BIRTH 
---------- -------------------- ------------- 
     1 Gregory House     1 
     2 Dougie Howser     1 
     3 Marie Curie      1 
     4 Dr Who       1 
     5 Dr Zeuss       1 

SQL> select * from work; 

     HID   IC  SINCE 
---------- ---------- ---------- 
     1   1   1 
     1   2   1 
     2   3   1 
     2   4   1 
     3   4   1 
     1   5   1 

6 rows selected. 

SQL> select h.hid, h.name 
    2 from hospital h 
    3   inner join work w 
    4     on w.hid = h.hid 
    5   inner join doctor d 
    6     on d.ic = w.ic 
    7 where not exists (select null 
    8      from work w2 
    9      where w2.hid != h.hid 
10      and w2.ic = w.ic) 
11 group by h.hid, h.name 
12 having count(*) > 2; 

     HID NAME 
---------- -------------------- 
     1 General 
+0

귀하의 도움과 설명에 감사드립니다. – tomss