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

SQL サブクエリで「許可される式は 1 つだけです」エラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2025-01-11 13:17:42
オリジナル
673 人が閲覧しました

Why Does My SQL Subquery Produce an

SQL サブクエリ エラー: 「許可される式は 1 つだけです」

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

問題のあるクエリ:

次のクエリは、A_ID 句内で ud とカウント (IN) を返すサブクエリの使用を試みます。

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)
ログイン後にコピー

根本原因:

内側の SELECT ステートメントは、A_IDud の 2 つの列を返します。 IN 演算子はこれを処理できません。外側のクエリの A_ID 列と比較するために 1 つの列が必要です。

修正されたクエリ:

解決策は、A_ID 列のみを返すようにサブクエリを変更することです。 カウントによる並べ替えは、ORDER BY COUNT(DISTINCT dNum) DESC:

を使用してサブクエリ内で実行できます。
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)
ログイン後にコピー

この改訂されたクエリは、個別の A_ID 値の数に基づいて dNum 値の上位 10% を正しく選択し、それらの A_ID 値を使用して外側のクエリをフィルタリングします。

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

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