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つの外部クエリは、サブクエリからの単一の結果を期待するように構成されています。しかし、構造化した方法では、サブクエリが複数の結果を返す可能性があります。実際にwant複数の結果がある場合は、次のように再構成します。
... where disease_id IN (subquery returning multiple rows...)
また、サブクエリは強制終了パフォーマンスであり、ネストされたサブクエリの場合は指数関数的に無効になります。代わりにINNER JOIN
の使用を検討することをお勧めします。
クエリを分解すると、
メインクエリ:
_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つのアイテムを返す可能性が高いようです。 WHERE symptom_id IN (sub-query2)
などのWHERE disease_id IN (sub-query1)
などのIN
句を試してみることをお勧めします