ホームページ >データベース >mysql チュートリアル >SQL サブクエリで「選択リストで指定できる式は 1 つだけです」エラーが発生するのはなぜですか?
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_ID
と COUNT(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 サイトの他の関連記事を参照してください。