2017-05-08 4 views
1

Ich habe versucht, einen Datensatz abzurufen, der mir die ID des Arztes und die Gesamtzahl aller von ihnen angegebenen Rezepte zurückgibt.SQL-Orakel: Anzeigen von Datensätzen, die nicht in einer anderen Tabelle gefunden werden

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

Durch diese Anweisung, ich bin in der Lage, die Informationen, solange es mindestens ein Rezept von einem Arzt gemacht zu erhalten. Dies ist, wie meine Ergebnisse wie

sehen
DID     COUNT(PR.DID)            
-------------------- -------------            
3292848       1            
3292885       10            
3293063       10            
3332949       15            
3332950       2 

Aber ich will es so angezeigt werden, dass auch Ärzte, die vorher nicht in der Aufzeichnung mit einer Zählung von 0

DID     COUNT(PR.DID)            
-------------------- -------------            
3292848       1            
3292885       10 
3293042       0    
3293063       10            
3332949       15            
3332950       2 
334021       0 
+1

der Join sollte 'left join' sein. –

Antwort

3

Zunächst einmal gezeigt werden vorgeschrieben haben Bitte vermeiden Sie die alte Joinsyntax. Verwenden Sie die korrekte Syntax JOIN.

Jetzt hier benötigen Sie eine LEFT JOIN, die Ihnen alles aus erster Tabelle und übereinstimmenden Datensätzen aus zweiter Tabelle geben würde. Für nicht übereinstimmende Datensätze erhalten Sie null, die Sie in where oder select Klausel verwenden können.

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

'count (pr.DID)' würde ausreichen..mit dem, was Sie gerade haben, wären die Ergebnisse falsch, da 'null's ebenfalls gezählt würden. –

+0

Danke! Ich erkannte auch, dass es "1" für nicht übereinstimmende Datensätze geben würde. Danke für das Aufzeigen. – Utsav

Verwandte Themen