使用ORDERBY过滤SQL中多个标准的结果



我对MySQL很陌生,写SQL脚本真的很困难,尤其是那些需要多个条件的脚本,比如

DB模式由以下关系方案组成:

  • 患者(pid、pname、年龄、城市(
  • 博士(did,dname,city(
  • 专业化(did,Specialization,start_date_of_Specialization(
  • 诊所(cid,cname,city(
  • 工时(did,cid,hours_per_week(
  • 咨询(pid、dod、cid、日期、疾病(

我必须用SQL:来表达这些查询

  1. 提供在"纽约"诊所工作但从未在诊所工作过的医生的详细信息在"多伦多">
  2. 提供每周工作至少60小时的医生的姓名和所在城市在同一个诊所或多个诊所

我目前的想法是使用ORDERBY语句将一些结果分组在一起;然后,通过HAVING语句过滤掉。但当有医生A在多伦多工作,但后来在纽约工作时,这是失败的(因为后来的原因,它补充道(。

SELECT Doctor.did, Doctor.dname, Doctor.city
FROM Doctor, Works_in, Clinic
WHERE (Doctor.did = Works_in.did) AND (Works_in.cid = Clinic.cid) 
ORDER BY Doctor.did
HAVING ...;

试试这些sql-我不确定你正在使用的mysql版本。因此我没有使用任何窗口函数。

提供在"纽约"诊所工作但从未在"多伦多"诊所工作过的医生的详细信息。

SELECT d.did, name, city FROM doctor d 
JOIN works_in w ON  d.did = w.did
JOIN clinic c ON c.cid = w.cid 
WHERE c.city = 'New York' AND d.did NOT IN (Select d.did from doctor d 
JOIN works_in w ON  d.did = w.did
JOIN clinic c ON c.cid = w.cid 
Where c.city = 'Toranto');

列出每周至少工作60小时的医生的姓名和所在城市,无论是在同一家诊所还是在多家诊所。

SELECT d.dname, c.cname FROM doctor d 
JOIN works_in w ON  d.did = w.did
JOIN clinic c ON c.cid = w.cid 
JOIN (SELECT did, SUM(hours_per_week) FROM works_in w 
GROUP BY did having SUM(hours_per_week) > 60) sum_w ON w.did = sum_w.did;

最新更新