SQL显式连接过滤条件

时间:2017-08-07 15:38:46

标签: sql join syntax implicit

使用此关系架构,患者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如果它不是一个简单的连接,我似乎会碰壁。

4 个答案:

答案 0 :(得分:2)

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

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'

答案 1 :(得分:1)

您可以使用内部联接

   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'

答案 2 :(得分:1)

以下内容应该可以正常工作:

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

答案 3 :(得分:0)

(a, b)