2016-04-10 28 views
0

Yuvalanmış bir seçim kullanmaya çalışıyorum ve hasta adı soyadı olan hasta adı ve e-postası olan hastaları görüntülemeye çalışıyorum.İç içe geçmiş seçme sorgusunu Oracle 11g'de kullanma

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

hasta tablo pat_id etti ancak pat_first, pat_last ve pat_email:

Ne kullanmak istiyorum budur. Patient_allergies tablosunun yalnızca patient_allergies_id_fk ve patient_allergies sütunları vardır. Ben gibi iç seçer ilk haline istediğiniz tabloları koyarsanız:

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); 

ancak bir hata veriyor - "ORA-01789: Sorgu blok sonuç sütun sayısı yanlış vardır". Sanırım 5 sütunlu bir tablodan ve iki sütundan oluşan bir tablodan çıkardığım için eksi yapmaya çalışıyorum, ancak istediğim sütunları görüntülemek için sorguyu nasıl alabileceğimi bilmiyorum (pat_first, pat_last ve pat_email).

Örneğin, hasta tablosunun 50 satırı vardır ve hasta_aldırları tablosunun 15'i vardır, bu 35 satırı hasta_sallamasında değil, pat_first, pat_last ve pat_email satırlarının çıktısını almaya çalışıyorum.

cevap

1

bu deneyin:

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

veya

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

Müthiş! Bu çalıştı, teşekkürler! İşlevde olmayanın farkında değildim (SQL'de acemi olduğum gibi). – user2444400