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_ID
と ud
の 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 サイトの他の関連記事を参照してください。