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
。我现在明白了。我理解这种联系。但是,拥有一些药剂学经验,尽管这确实与医生有关,但这并不是在处方中,只是指定家庭医生(有时称为初级医生)。