SQL 显式加入过滤条件
SQL explicit join filter condition
使用此关系模式,患者 ID 和员工 ID 是外键,id.staff
和 pid.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
使用此关系模式,患者 ID 和员工 ID 是外键,id.staff
和 pid.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