2016-04-10 13 views
0

私はネストされた選択を使用しようとしていて、患者の姓の患者の姓とそのメールを含む行を表示しようとしています。Oracle 11gでネストされた選択クエリを使用

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

患者テーブルがpat_idたしかし、pat_first、pat_last、およびpat_email:

は、私が使用したいのはこれです。 Patient_allergiesテーブルには、patient_allergies_id_fkとpatient_allergiesカラムしかありません。私は次のように内側の選択の最初に私が欲しいのテーブルを置く場合:

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

が、それは誤りなります - 「ORA-01789を:問合せブロックは、結果の列の数が間違ってい」。私は5列のテーブルからマイナスを行い、2列のテーブルを減算しようとしているからだと思っていますが、希望の列を表示するためのクエリをどのように得ることができるかわかりません(pat_first、pat_last、pat_email )。

たとえば、patientテーブルには50行があり、patient_allergiesテーブルには15があります。これらの35行をpatient_allergiesに入れずに、pat_first、pat_last、pat_emailの各行を出力しようとしています。

答えて

1

はこれを試してみてください。

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

または

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

すごいです!それはうまくいきました。私は機能していないことを認識していませんでした(私はSQLの初心者です)。 – user2444400

関連する問題