ホームページ > データベース > mysql チュートリアル > SQL サブクエリが「サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。」を返すのはなぜですか?

SQL サブクエリが「サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。」を返すのはなぜですか?

Susan Sarandon
リリース: 2025-01-11 13:26:42
オリジナル
684 人が閲覧しました

Why Does My SQL Subquery Return

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_IDCOUNT(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 BYIN 句で使用される前にサブクエリの結果を並べ替えようとしていたためです。 並べ替えは最終的な結果セットに適用される必要があります。

この改訂されたクエリでは、サブクエリの結果内で dNum が見つかった場合に、個別の A_ID 値の数が正しく選択されます。 サブクエリは、個別の A_ID の数に基づいて dNum 値の上位 10% を効率的に識別し、その後、外側のクエリは、選択された dNum に関連付けられた個別の A_ID 値をカウントします。 最後の ORDER BY 句は、個別の dNum 値の数に基づいて結果を並べ替えます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート