SQL oracle:显示在其他表中找不到的记录
我试着去拿一份记录,它会把医生的身份证和他们开的所有处方的总数还给我SQL oracle:显示在其他表中找不到的记录,sql,oracle,Sql,Oracle,我试着去拿一份记录,它会把医生的身份证和他们开的所有处方的总数还给我 SELECT doc.DID, COUNT(pr.DID) FROM DOCTOR doc, PRESCRIPTION pr WHERE doc.DID = pr.DID GROUP BY doc.DID; 通过使用此声明,只要医生至少开了一张处方,我就能够收到信息。这就是我的结果 DID COUNT(PR.DID)
SELECT doc.DID, COUNT(pr.DID)
FROM DOCTOR doc, PRESCRIPTION pr
WHERE doc.DID = pr.DID
GROUP BY doc.DID;
通过使用此声明,只要医生至少开了一张处方,我就能够收到信息。这就是我的结果
DID COUNT(PR.DID)
-------------------- -------------
3292848 1
3292885 10
3293063 10
3332949 15
3332950 2
但我想让它显示出来,即使是以前没有开过处方的医生也会在记录中显示为0
DID COUNT(PR.DID)
-------------------- -------------
3292848 1
3292885 10
3293042 0
3293063 10
3332949 15
3332950 2
334021 0
首先,请避免使用旧的联接语法。使用正确的
JOIN
语法
现在,您需要一个左联接
,它将为您提供第一个表中的所有内容以及第二个表中的匹配记录。对于不匹配的记录,您将获得null
,您可以在where
或select
子句中使用它
SELECT doc.DID, COUNT(pr.DID)
FROM DOCTOR doc
left join
PRESCRIPTION pr
on doc.DID = pr.DID
GROUP BY doc.DID;
连接应该是
left-join
count(pr.DID)
就足够了。使用您当前拥有的,结果将不正确,因为null
s也将被计算。谢谢!我还意识到,对于不匹配的记录,它会给出1
。谢谢你指出。