11
select 
    disease_name 
from 
    disease 
where 
    disease_id=
    (select disease_id from disease_symptom where
        disease.disease_id=disease_symptom.disease_id AND 
        symptom_id=
               (select symptom_id from symptom where symptom.symptom_id=disease_symptom.symptom_id
                AND symptom_name='fever' OR symptom_name='head ache'))

给出子查询返回多行的错误。原因是什么?

4

2 回答 2

18

您的两个外部查询的结构是期望来自其子查询的单个结果。但是按照你的结构方式,你的子查询可能会返回一个以上的结果。如果您实际上想要多个结果,请像这样重组它:

... where disease_id IN (subquery returning multiple rows...)

此外,子查询会导致性能下降,嵌套子查询会成倍恶化。您可能想考虑INNER JOIN改用。

于 2013-02-12T21:23:28.113 回答
2

分解你的查询,你有

主要查询:

select disease_name from disease where disease_id=

子查询 1:

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

子查询2:

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

由于您使用等号,子查询不能返回多个项目。OR由于正在使用,子查询 2 似乎有更大的机会返回 2 个项目。您可能希望尝试IN诸如WHERE symptom_id IN (sub-query2)with之类的子句WHERE disease_id IN (sub-query1)

于 2013-02-12T21:23:04.290 回答