SQL oracle:显示在另一个表中找不到的记录

时间:2017-05-08 17:04:22

标签: 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)                                              
-------------------- -------------                                              
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

1 个答案:

答案 0 :(得分:3)

首先,请避免使用旧的连接语法。使用正确的JOIN语法。

现在你需要一个LEFT JOIN,它可以提供第一张表和第二张表中匹配记录的所有内容。对于不匹配的记录,您将获得null,您可以在whereselect子句中使用该记录。

SELECT doc.DID, COUNT(pr.DID)
FROM DOCTOR doc
left join
PRESCRIPTION pr
on doc.DID = pr.DID
GROUP BY doc.DID;