【发布时间】:2026-02-13 08:20:03
【问题描述】:
我的要求是列出所有医生开出的所有处方,这些医生至少开过一次由 公司克莱恩。列出医生姓名、药物名称、患者 姓名和处方日期。
例如,如果存储在数据库中的数据是这样的
CREATE TABLE DOCTOR (
DID VARCHAR2(20)
CONSTRAINT Doctor_DID_NotNull NOT NULL,
DName VARCHAR2(50),
Speciality VARCHAR2(70),
YearOfExp Number,
CONSTRAINT Doctor_PK PRIMARY KEY (DID)
);
CREATE TABLE PATIENT (
PID VARCHAR2(20)
CONSTRAINT PATIENT_PID_NotNull NOT NULL,
PName VARCHAR2(50),
PDOB DATE,
PAddress VARCHAR2(70),
PPostalcode VARCHAR2(12),
FamilyDoctor VARCHAR2(20),
CONSTRAINT Patient_PK PRIMARY KEY (PID),
CONSTRAINT Patient_FK FOREIGN KEY (FamilyDoctor) REFERENCES DOCTOR (DID)
);
这就是我用来获取数据的方法
SELECT dr.DName, pr.Tradename, pa.PName, pr.PrescDT
FROM PRESCRIPTION pr, DOCTOR dr, PATIENT pa
WHERE pr.PharName ='kleen'
AND pr.DID = dr.DID
AND pr.PID = pa.PID;
但它只返回给我说没有选择任何行。那我该如何表达,这样我才能得到我想要的结果。
【问题讨论】:
-
今日提示:切换到现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 -
可能是数据问题。你在处方中有哪些记录
pr.PharName ='kleen'?我的猜测是没有。也许你有'KLEEN'或'Kleen'的记录,也许你根本没有记录。 -
@APC,在我看来是对的。考虑
UPPER(PharName) = 'KLEEN'