0

こんにちは、ここに私のSQLクエリがあります:

WHERE table1.Regnumber IN (
    CASE 
        WHEN @fRegNumber IS NOT NULL AND @fRegNumber<>-1 THEN @fRegNumber
        ELSE (SELECT Regnumber FROM table2)
    END
)

エラー:

'サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

どうすればこれを修正できますか?

4

3 に答える 3

1

への変更:

WHERE IF(@fRegNumber IS NOT NULL AND @fRegNumber<>-1,
         table1.Regnumber = @fRegnumber),
         table1.Regnumber IN (SELECT Regnumber FROM table2))

WHERE x IN次の 2 つの方法で使用できます。

WHERE x IN (expr1, expr2, expr3, ...)

この場合、サブクエリを式として使用すると、単一の値のみが返される必要があります。複数の値を返すサブクエリは結合されません。

また:

WHERE x IN (subquery)

これは、サブクエリが複数の行を返すことを可能にする形式でありx、それらすべてに対してテストされます。

単一の値またはサブクエリの結果に対してテストするかどうかを条件付けする必要があるためINIF.

このクエリを LEFT JOIN として記述する方法は他にもあるかもしれません。

于 2013-11-02T15:07:09.970 に答える
1

問題はこのサブクエリにあります。

(SELECT Regnumber FROM table2)

テーブルからすべてのregnumberを返しています。クエリ全体のコンテキストでは、1 つだけを選択する必要があります。問題を解決するための最初のステップは、必要な問題とその理由を決定することです。

于 2013-11-02T15:07:21.867 に答える