2017-08-07 98 views
0

使用這種關係模式,病人ID和工作人員ID與id.staffpid.patient是唯一鍵外鍵:SQL顯式連接的過濾條件

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) 

所以說,如果我要列舉的病人的姓名與預約一個特定的工作人員,即約翰史密斯,我將如何明確地做到這一點?

我已隱式管理,但我知道這是有點皺眉,但我不能使用WHERE語句達到它。

任何幫助將不勝感激,任何時候我嘗試和使用INNER JOIN如果不是簡單的連接,我似乎打了一堵牆。

回答

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

您可以使用內部聯接

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' 
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>; 
0
select staff.fname, staff.role, 
patient.pfname, plname, appoitment.aotdate 
from staff, patient, appointment 
where patient.pid=appointment.patientId 
and staff.id=appointment.staffid