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'))
Run Code Online (Sandbox Code Playgroud)
给出子查询返回多行的错误.原因是什么?
bio*_*net 17
您的两个外部查询的结构是期望来自其子查询的单个结果.但是,如果你有结构化的方式,你的子查询可能会返回多个结果.如果您确实需要多个结果,请按以下方式重组:
... where disease_id IN (subquery returning multiple rows...)
Run Code Online (Sandbox Code Playgroud)
此外,子查询是kill性能,并且它对嵌套子查询呈指数级支持.您可能希望改为使用INNER JOIN
.
小智 2
分解你的查询,你有
主要查询:
select disease_name from disease where disease_id=
Run Code Online (Sandbox Code Playgroud)
子查询1:
select disease_id from disease_symptom where
disease.disease_id=disease_symptom.disease_id AND
symptom_id=
Run Code Online (Sandbox Code Playgroud)
子查询2:
select symptom_id from symptom where symptom.symptom_id=disease_symptom.symptom_id
AND symptom_name='fever' OR symptom_name='head ache'
Run Code Online (Sandbox Code Playgroud)
由于您使用等号,子查询无法返回多个项目。由于正在使用,看起来子查询 2 有更大的机会返回 2 个项目OR
。您可能希望尝试使用诸如withIN
之类的子句WHERE symptom_id IN (sub-query2)
WHERE disease_id IN (sub-query1)