2016-04-10 8 views
0

Ich versuche, eine geschachtelte auswählen und Zeilen mit einem Patienten Vorname Nachname und ihre E-Mail anzeigen.Verwenden einer geschachtelten Select-Abfrage in Oracle 11g

Was ich verwenden möchte, ist dies:

select pat_first, pat_last, pat_email 
from (select pat_id 
    from patients 
minus 
    select pat_allergies_id_fk 
    from patient_allergies); 

jedoch die Patienten Tabelle hat pat_id, pat_first, pat_last und pat_email. Die Tabelle Patient_allergies hat nur die Spalten patient_allergies_id_fk und patient_allergies. Wenn ich legte die Tafeln, die ich in der ersten wie der inneren wählt wollen:

select pat_first, pat_last, pat_email 
from (select pat_id, pat_first, pat_last, pat_email 
    from patients 
minus 
    select pat_allergies_id_fk 
    from patient_allergies); 

aber es gibt einen Fehler - „ORA-01789: Abfrageblock falsche Anzahl der Ergebnisspalten hat“. Ich denke, ich versuche, ein Minus aus einer Tabelle mit 5 Spalten zu machen und eine Tabelle aus zwei Spalten zu subtrahieren, aber ich bin mir nicht sicher, wie ich die Abfrage dazu bringen kann, meine gewünschten Spalten anzuzeigen (pat_first, pat_last und pat_email)).

Zum Beispiel hat die Patiententabelle 50 Zeilen, und die patient_allergies Tabelle hat 15, ich versuche diese 35 Zeilen nicht in patient_allergies zu bekommen und lasse die pat_first-, pat_last- und pat_email-Zeilen ausgeben.

Antwort

1

versuchen Sie dies:

select pat_first, pat_last, pat_email 
from patients 
where pat_id not in (select pat_allergies_id_fk from patient_allergies); 

oder

select pat_first, pat_last, pat_email 
from patients 
where not exists (select null from patient_allergies where pat_allergies_id_fk = pat_id); 
+0

Awesome! Das hat funktioniert, danke! Ich war mir nicht bewusst, dass das nicht in Funktion ist (da ich ein Neuling bei SQL bin). – user2444400