ホームページ >データベース >mysql チュートリアル >SQL サブクエリで「選択リストで指定できる式は 1 つだけです」エラーが発生するのはなぜですか?

SQL サブクエリで「選択リストで指定できる式は 1 つだけです」エラーが発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-11 13:36:42316ブラウズ

Why Does My SQL Subquery Produce

SQL サブクエリ エラーのトラブルシューティング: 「指定できる式は 1 つだけです...」

このエラー「サブクエリが EXISTS で導入されていない場合、選択リストで指定できる式は 1 つだけです」は、SQL クエリが IN 句内でサブクエリを使用し、サブクエリが複数の列を返そうとするときに発生します。 。 IN 演算子は、比較のために 1 つの列のみを受け入れます。

問題のあるクエリを調べてみましょう:

<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>

内側の SELECT ステートメントは、誤って A_IDCOUNT(DISTINCT dNum) AS ud の両方を返します。 これは、IN で使用されるサブクエリのルールに違反します。

修正されたクエリ:

解決策には、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>

この改訂されたクエリでは、サブクエリ内の A_ID のみが正しく選択されるようになり、エラーが解決されました。 COUNT(DISTINCT dNum) による順序付けはサブクエリ自体内で処理され、A_ID 値の上位 10% (COUNT(DISTINCT dNum) に基づいて) が選択されることが保証されます。

以上がSQL サブクエリで「選択リストで指定できる式は 1 つだけです」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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