首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL DML Oracle查询

SQL DML Oracle查询
EN

Stack Overflow用户
提问于 2012-11-25 05:05:46
回答 1查看 187关注 0票数 0

我试着问这个问题:西班牙的医院名称是什么,其中有2名以上的医生只为该医院工作。但是结果并不是我所期望的。

我有这些表格:

代码语言:javascript
复制
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)
);

我试着这样做:

代码语言:javascript
复制
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
;    

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-25 05:20:15

假设你指的是拥有2名以上专职医生的医院,这对你来说应该是可行的。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13545608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档