web-dev-qa-db-ja.com

サブクエリが複数の行を返す

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

サブクエリが複数の行を返すというエラーが発生します。原因は何ですか?

10
user2066199

2つの外部クエリは、サブクエリからの単一の結果を期待するように構成されています。しかし、構造化した方法では、サブクエリが複数の結果を返す可能性があります。実際にwant複数の結果がある場合は、次のように再構成します。

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

また、サブクエリは強制終了パフォーマンスであり、ネストされたサブクエリの場合は指数関数的に無効になります。代わりにINNER JOINの使用を検討することをお勧めします。

17
bioneuralnet

クエリを分解すると、

メインクエリ:

_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句を試してみることをお勧めします

2
UnholyRanger