SQL サブクエリ選択リストの制限
「サブクエリが EXISTS で始まらない場合、選択リストに指定できる式は 1 つだけです」というエラーが発生した場合は、サブクエリの戻り値に問題があることを意味します。 WHERE IN 句内にネストされたサブクエリでは、IN の反対側との比較のために 1 つの列のみが返されるようにすることが重要です。
最初に提供されたクエリには、A_ID と COUNT(DISTINCT dNum) を ud として返すサブクエリが含まれています。ただし、WHERE IN 句では、サブクエリはメイン クエリの A_ID と比較される 1 つの列のみを返すことができます。この制限が存在する理由は、サブクエリの機能が値のリストを返し、メイン クエリの A_ID がサブクエリ結果の値と一致するかどうかを確認することであるためです。
この問題を解決するには、メイン クエリの WHERE IN 句の A_ID と比較される A_ID 列のみを返すようにサブクエリを変更します。さらに、ORDER 句でソートを使用すると、COUNT を列として返さずにサブクエリから行を選択できます。
修正されたクエリの例:
<code class="language-sql">SELECT COUNT(DISTINCT dNum) FROM myDB.dbo.AQ WHERE A_ID IN ( SELECT DISTINCT TOP (0.1) PERCENT A_ID FROM myDB.dbo.AQ WHERE M > 1 AND B = 0 GROUP BY A_ID ORDER BY COUNT(DISTINCT dNum) DESC )</code>
これらの変更を実装することで、クエリは WHERE IN 比較で単一の列を返すというルールを守りながら、目的の結果を正しく返すことができます。
以上がSQL サブクエリが「サブクエリが EXISTS で導入されていない場合、選択リストで指定できる式は 1 つだけです」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。