ホームページ >データベース >mysql チュートリアル >SQL Server で「サブクエリが 1 つ以上の値を返しました」エラーを解決するにはどうすればよいですか?

SQL Server で「サブクエリが 1 つ以上の値を返しました」エラーを解決するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-17 15:21:09427ブラウズ

How to Resolve the

SQL Server の「サブクエリが複数の値を返しました」エラーのトラブルシューティング

比較演算子 (「=」など) 内で使用される SQL Server サブクエリは、単一の値を生成する必要があります。 複数の値を指定すると、「サブクエリが複数の値を返しました。」というエラーが発生します。 解決策を探ってみましょう。

デバッグ手順:

  1. サブクエリ結果の検証: サブクエリは 1 行と 1 列のみを返す必要があります。複数の結果を生成する可能性のあるあいまいなデータや重複したデータがないかクエリを注意深く調べてください。

  2. 結合条件の確認: メイン クエリとサブクエリの間の結合条件で 1 対 1 の関係が作成されていることを確認します。冗長または不要な結合基準を削除します。

  3. 集計関数/グループ化関数: サブクエリで集計関数 (SUMAVGCOUNT など) またはグループ化関数を使用する場合は、それらが正しく適用されていること、およびそれらが単一の出力値を生成することを確認してください。

例と解決策:

提供された例は、複数のコスト値を返すサブクエリがエラーを引き起こすことを示しています。 このソリューションでは、TOP 1 を使用してサブクエリの出力を 1 行に制限します:

<code class="language-sql">SELECT
    orderdetails.sku,
    orderdetails.mf_item_number,
    orderdetails.qty,
    orderdetails.price,
    supplier.supplierid,
    supplier.suppliername,
    supplier.dropshipfees,
    cost = (SELECT TOP 1 supplier_item.price
           FROM   supplier_item
           WHERE  supplier_item.sku = orderdetails.sku
                  AND supplier_item.supplierid = supplier.supplierid)
FROM   orderdetails
       INNER JOIN supplier ON supplier.supplierid = orderdetails.mfr_id
       INNER JOIN group_master ON group_master.sku = orderdetails.sku  
WHERE  invoiceid = '339740'</code>

TOP 1 を使用すると、1 行 (したがって 1 つの価格) のみが返されることが保証され、エラーが解決されます。 TOP 1 句のない ORDER BY は任意の行を返すことに注意してください。 順序が重要な場合は、一貫した結果を得るために ORDER BY を追加することを検討してください。

以上がSQL Server で「サブクエリが 1 つ以上の値を返しました」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。