SQL 显式加入过滤条件

SQL explicit join filter condition

使用此关系模式,患者 ID 和员工 ID 是外键,id.staffpid.patient 是唯一键:

staff(ID, fname, lname, role)
patient(pID, pFname, pLname, bdate, address, phone)
appointment(aptID, patientID, staffID, aptDate, aptTime)
procedures(procNum, pName, price)
aptDetail(aptID, procNo) 

假设我想列出与特定工作人员(即 John Smith)有约会的患者姓名,我将如何明确地做到这一点?

我已经隐式地管理了,但我知道这有点不受欢迎,但如果不使用 WHERE 语句我就无法达到它。

我将不胜感激任何帮助,任何时候我尝试使用 INNER JOIN 如果它不是一个简单的连接,我似乎会碰壁。

您可以使用内部联接

   select 
      a.pID
      , a.pFname
      , a.pLname
      , a.bdate
      , a.address
      , a.phone
      , b.aptDate
      , b.aptTime
      , c.fname
      , c.lname
      , c.role
   from patient a 
   INNER JOIN appointment b on b.patientID = a.pID
   INNER JOIN staff c on b.staffID = c.ID on concat(fname, ' ', lname ) ='John Smith'

像下面这样的东西应该可以正常工作:

SELECT p.*
FROM appointment AS a
   INNER JOIN staff AS s ON a.staffID = s.pID
   INNER JOIN patient AS p ON a.patientID = p.pID
WHERE s.ID = <yourstaffid>;

这是您正在寻找的查询类型吗?

select distinct pFname, pLname
from patient p
  join appointment a on p.pID = a.patientID
  join staff s on a.staffID = s.ID
where s.fname = 'John' and s.lname = 'Smith'
select staff.fname, staff.role,
patient.pfname, plname, appoitment.aotdate
from staff, patient, appointment
where patient.pid=appointment.patientId
and staff.id=appointment.staffid