SQL サブクエリ エラー: SELECT リスト内の単一の式
この SQL クエリはエラーを生成します:
<code class="language-sql">select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID, COUNT(DISTINCT dNum) AS ud FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY ud DESC)</code>
「サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです」というエラー メッセージは、サブクエリの SELECT
句に問題があることを示しています。 サブクエリは、A_ID
と COUNT(DISTINCT dNum)
の 2 つの列を返そうとします。 IN
(または =
、!=
などの他の比較演算子) を使用する場合、サブクエリの SELECT
リストには 1 つの列のみを含める必要があります。
解決策:
修正されたクエリは、サブクエリから A_ID
のみを返す必要があります:
<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>
変更に注目してください:
SELECT
句には、A_ID
のみが含まれるようになりました。ORDER BY
句は、外側のクエリに移動されました。 これは、元の ORDER BY
が IN
句で使用される前にサブクエリの結果を並べ替えようとしていたためです。 並べ替えは最終的な結果セットに適用される必要があります。この改訂されたクエリでは、サブクエリの結果内で dNum
が見つかった場合に、個別の A_ID
値の数が正しく選択されます。 サブクエリは、個別の A_ID
の数に基づいて dNum
値の上位 10% を効率的に識別し、その後、外側のクエリは、選択された dNum
に関連付けられた個別の A_ID
値をカウントします。 最後の ORDER BY
句は、個別の dNum
値の数に基づいて結果を並べ替えます。
以上がSQL サブクエリが「サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。