我正在从一个网站学习SQL,并为这个问题创建了以下解决方案:

显示患者ID、名字、姓氏和主治doctor 的姓名 特色菜.只显示被诊断为癫痫的患者 doctor 的名字是‘丽莎’

判断患者、入院者和doctor 表以了解所需信息 信息.

表 struct

enter image description here

我的解决方案是:

SELECT 
  p.patient_id,
  p.first_name,
  p.last_name,
  d.specialty
FROM 
  patients p,
  admissions a,
  doctors d
where
  p.patient_id = 
  (
    select a.patient_id
    where
      a.attending_doctor_id = 
      (  
        select d.doctor_id
        where 
          d.specialty = 'Epilepsy'
          and d.first_name = 'Lisa'
      )
  )

但我得到的结果是空的,没有显示任何行. 我非常肯定我对子查询的理解不足,我不想使用Join,因为我想练习子查询.

为什么上面的方法不能通过查找匹配的行来实现呢?

我相信该网站使用的是MySQL.

推荐答案

恕我直言,您正在"学习"的网站并不能帮助您了解您的样例代码是否符合他们的建议.

以下是如何处理这个问题的方法.您正在使用的是一个所谓的relational数据库.其中的每个表包含entities个--在您的例子中,包括患者、住院doctor 和doctor .这些实体之间存在关系.每名患者可以零入院或多次入院.而且,每个doctor 可以零入院或多入院.

我们如何区分哪些患者与哪些住院有关?通过匹配patient_id个值ON patients.patient_id = admissions.patient_id.同样,我们可以通过匹配ON admissions.attending_doctor_id = doctors.doctor_id来区分哪些doctor 与哪些入院相关.

在医院记录保存的现实世界中,无论如何,在美国,病人的ID被称为"病历号码".doctor ID被称为"提供者ID"或类似的东西,而入院ID被称为"遭遇号"或类似的东西.您的数据模型反映了许多医院的政策:每个当前患者只有一名主治doctor .

你的任务是找出哪些患者患有患有特殊癫痫的丽莎博士.要做到这一点,您需要将Patients实体连接到Admission实体,然后将该批次连接到Doctors实体.并且您需要在适当的id值上加入它们.像这样.

SELECT 
/* the columns you want in your result set */
       patients.patient_id,
       patients.first_name,
       patients.last_name,
       doctors.specialty
/* the entities and relationships */     
FROM patients
JOIN admissions ON patients.patient_id = admissions.patient_id
JOIN doctors ON admissions.attending_doctor_id = doctors.doctor_id
/* the filters */
WHERE doctors.specialty = 'Epilepsy'
  AND doctors.first_name = 'Lisa'

为什么您可能从该查询中返回零行?如果没有叫Lisa的doctor ,她也(AND)治疗癫痫,那么您的查询将不会找到任何东西.如果Lisa没有录取,您的查询将不会找到任何内容.

我希望这能帮到你.

找一个更好的教程.有一天,你将在医院里工作的病人应该比这位doctor 教给你的更好.我是认真的.

Mysql相关问答推荐

如何使RST(*)在巨大的数据集上快速执行?

mysql查询汇总数据

慢查询日志(log)甚至包括快速查询,因为它包括等待锁定所花费的时间

对具有依赖子查询结果的2列使用等式比较来优化连接

如何为Oracle DB查询获得所需的GROUP BY结果?

MySQL中如何对字符串进行算术运算?

发生的原因及解决方法

MySQL如何在触发器内部 Select 多行然后插入它们

实体内约束的唯一增量 ID 生成

仅计算 DATEDIFF (MySQL) 中的工作日

从 R 脚本创建新的 MYSQL 数据库

谁能帮我优化where子句

MySQL在定义表的位置后抛出错误

具有别名主机的 ssh 反向 mysql tunel

MariaDB 下的慢速更新、删除和插入查询

如何使用 C++ 连接 mySQL 数据库

加快 MySQL 中的行计数

Python MYSQL 更新语句

MySQL使用phpmyadmin重新排列列的顺序

如何将数组存储到mysql中?