Sql 仅获取在其任何行中不包含特定值的值
我的要求是列出所有医生开的处方,这些医生至少开过一次他们提供的药物 克莱恩公司。列出医生、药物名称、患者的姓名 处方名称和日期 例如,如果数据库中存储的数据是这样的Sql 仅获取在其任何行中不包含特定值的值,sql,oracle,Sql,Oracle,我的要求是列出所有医生开的处方,这些医生至少开过一次他们提供的药物 克莱恩公司。列出医生、药物名称、患者的姓名 处方名称和日期 例如,如果数据库中存储的数据是这样的 CREATE TABLE DOCTOR ( DID VARCHAR2(20) CONSTRAINT Doctor_DID_NotNull NOT NULL, DName VARCHAR2(50), Speciality VARCHAR2(70),
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;
但它只返回到我说,没有选择任何行。那么我该如何表达它,以便得到我想要的结果。我不确定我是否正确理解了你的问题,但我想你可以尝试以下查询。请尝试发布样本数据和所需输出(文本格式)。如有任何问题,请联系我们
SELECT dr.DName, pr.Tradename, pa.PName, pr.PrescDT
FROM DOCTOR dr
INNER JOIN (SELECT DISTINCT dr.DID
FROM PRESCRIPTION pr
INNER JOIN DOCTOR dr ON pr.DID = dr.DID
WHERE pr.PharName ='kleen') dr2 ON dr.DID = dr2.DID
INNER JOIN PRESCRIPTION pr ON pr.DID = dr.DID
INNER JOIN PATIENT pa ON pr.PID = pa.PID
;
在patient表中,familydoctor是引用医生表的列名,因此请按
SELECT dr.dname,
pr.tradename,
pa.pname,
pr.prescdt
FROM prescription pr
JOIN doctor dr
ON ( pr.did = dr.did )
JOIN patient pa
ON ( dr.did = pa.familydoctor)
WHERE LOWER(pr.pharname) = LOWER('kleen');
如果需要,根据您的要求添加左侧外部连接
或右侧外部连接
理想情况下,您应该为所有三个表提供列和示例数据,然后更好地分析问题。今天的提示:切换到现代的显式
JOIN
语法。更容易写入(无错误),更容易读取(和维护),并且在需要时更容易转换为外部联接。可能是数据问题。您在处方中有哪些记录,其中pr.PharName='kleen'
?我猜没有。也许你有'KLEEN'
或'KLEEN'
的记录,也许你根本没有记录。@APC,在我看来是对的。考虑<代码>上(法名)= 'kele' 实际上,我认为你在医生和病人之间的连接是不正确的。连接将在处方药和患者之间,我认为OP是正确的,但OP并没有为处方药表提供DDL。一张处方有两个参考,一个是写给医生的,一个是写给病人的,可能是也可能不是病人的家庭医生。@释放我的加入是基于问题中提到的OP的关系,familydoctor
是指did
。我现在明白了。我理解这种联系。但是,拥有一些药剂学经验,尽管这确实与医生有关,但这并不是在处方中,只是指定家庭医生(有时称为初级医生)。