子查询返回超过1行

时间:2013-02-12 21:09:54

标签: mysql mysql-5.5

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

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

2 个答案:

答案 0 :(得分:16)

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

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

此外,子查询是杀死性能,并且它对嵌套子查询呈指数级支持。您可能希望改为使用INNER JOIN

答案 1 :(得分: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个项目。您可以尝试使用INWHERE symptom_id IN (sub-query2)

WHERE disease_id IN (sub-query1)条款