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'))
发出子查询返回多行的错误。原因是什么?
答案 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个项目。您可以尝试使用IN
和WHERE symptom_id IN (sub-query2)
WHERE disease_id IN (sub-query1)
条款