2013-02-12 11 views
8

Alt sorgunun birden fazla satır döndürdüğü bir hata verir. Sebebi nedir?alt sorgu 1 satırdan daha fazla döndürür

+1

Sanırım bariz olanı söyleyeceğim: alt sorgu birden fazla satır döndürür. "hastalık_kimliği" birden fazla değere eşit olamaz. Bu sorgu, alt sorgu yerine "JOIN" ile daha iyi yazılabilir. –

+0

http://stackoverflow.com/a/3423792/2806972 c Bu, bu Q için çözüm olabilir: –

cevap

2

aşağı Sorgunuzla Breaking, sahip

Ana sorgusu:

select disease_name from disease where disease_id= 

Alt sorgu 1:

select disease_id from disease_symptom where 
     disease.disease_id=disease_symptom.disease_id AND 
     symptom_id= 

Alt sorgu 2:

select symptom_id from symptom where symptom.symptom_id=disease_symptom.symptom_id 
      AND symptom_name='fever' OR symptom_name='head ache' 

kullandığınız yana eşit işaretler, alt sorgular cann Birden çok öğe döndürür. Alt sorgu 2'nin kullanılmakta olduğu OR nedeniyle 2 öğe döndürme şansı daha yüksek gibi görünüyor.

14

WHERE symptom_id IN (sub-query2) gibi IN yan tümcesini denemek isteyebilirsiniz. İki dış sorgunuz alt sorgularından tek bir sonuç beklemek üzere yapılandırılmıştır. Ancak, yapılandırdığınız şeylerin olduğu gibi, alt sorgularınız da birden fazla sonuç verebilir. Aslında birden fazla sonuç istiyorsanız, bunu böyle yeniden:

Ayrıca
... where disease_id IN (subquery returning multiple rows...) 

, alt sorgular performansını öldürmek olduğunu ve katlanarak iç içe alt sorgular için wosrse oluyor. Bunun yerine INNER JOIN'u kullanarak bakmak isteyebilirsiniz.