【问题标题】:SQL DML query - need assistanceSQL DML 查询 - 需要帮助
【发布时间】:2012-11-23 20:22:28
【问题描述】:

我是 SQL 的初学者,我正在尝试创建一个查询。

我有这些表:

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)
 );

问题是:1980 年以后出生并在英国和西班牙工作的医生的姓名和身份证是什么?谢谢

【问题讨论】:

  • 对于两个略有不同的答案,请澄清在英格兰和西班牙工作 - 表明博士在两国之间旅行并在这两个国家工作(通过 BlueFeet 回答)... VS 在英格兰或西班牙工作——你不在乎哪个,只要是其中之一。 (通过 Yogesh 回答)

标签: sql dml


【解决方案1】:

你可以使用类似这样的东西:

select d.name
from doctor d
left join work w
  on d.ic = w.ic
left join hospital h
  on w.hid = h.id
where d.date_of_birth >= '1980-01-01'
  and h.country in ('England', 'Spain')
group by d.name
having count(distinct h.country) = 2;

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT d.name, d.ic
    FROM doctor d
    JOIN work w ON d.ic = i.ic
    JOIN hospital h ON w.hid = h.hid
    WHERE YEAR(d.date_of_birth) >= 1980
    AND UPPER(h.country) IN ('ENGLAND', 'SPAIN');
    

    我希望这就足够了。

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 1970-01-01
      • 2016-07-04
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多