SQL Server の「サブクエリが複数の値を返しました」エラーのトラブルシューティング
比較演算子 (「=」など) 内で使用される SQL Server サブクエリは、単一の値を生成する必要があります。 複数の値を指定すると、「サブクエリが複数の値を返しました。」というエラーが発生します。 解決策を探ってみましょう。
デバッグ手順:
サブクエリ結果の検証: サブクエリは 1 行と 1 列のみを返す必要があります。複数の結果を生成する可能性のあるあいまいなデータや重複したデータがないかクエリを注意深く調べてください。
結合条件の確認: メイン クエリとサブクエリの間の結合条件で 1 対 1 の関係が作成されていることを確認します。冗長または不要な結合基準を削除します。
集計関数/グループ化関数: サブクエリで集計関数 (SUM
、AVG
、COUNT
など) またはグループ化関数を使用する場合は、それらが正しく適用されていること、およびそれらが単一の出力値を生成することを確認してください。
例と解決策:
提供された例は、複数のコスト値を返すサブクエリがエラーを引き起こすことを示しています。 このソリューションでは、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 サイトの他の関連記事を参照してください。