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

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

4

2 に答える 2

18

2 つの外側のクエリは、サブクエリから 1 つの結果を期待するように構造化されています。しかし、物事を構造化する方法によっては、サブクエリが複数の結果を返す場合があります。実際に複数の結果が必要な場合は、次のように再構築します。

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

また、サブクエリはキルパフォーマンスであり、ネストされたサブクエリでは指数関数的に悪化します。代わりに使用することを検討することをお勧めしますINNER JOIN

于 2013-02-12T21:23:28.113 に答える
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'

等号を使用しているため、サブクエリは複数のアイテムを返すことはできません。サブクエリ 2 がOR使用されているため、2 つのアイテムを返す可能性が高いようです。withINなどの句を試してみてください。WHERE symptom_id IN (sub-query2)WHERE disease_id IN (sub-query1)

于 2013-02-12T21:23:04.290 に答える