Erreur de sous-requête SQL : « Une seule expression autorisée »
Cette erreur « Une seule expression peut être spécifiée dans la liste de sélection lorsque la sous-requête n'est pas introduite avec EXISTS » se produit lorsqu'une sous-requête utilisée dans une clause IN
renvoie plusieurs colonnes. L'opérateur IN
attend un ensemble de résultats sur une seule colonne à des fins de comparaison.
Requête problématique :
La requête suivante tente d'utiliser une sous-requête renvoyant A_ID
et un nombre (ud
) dans une clause IN
:
<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>
Cause fondamentale :
L'instruction interne SELECT
renvoie deux colonnes : A_ID
et ud
. L'opérateur IN
ne peut pas gérer cela ; cela nécessite une seule colonne pour la comparaison avec la colonne A_ID
dans la requête externe.
Requête corrigée :
La solution est de modifier la sous-requête pour renvoyer uniquement la colonne A_ID
. Le tri par nombre peut être effectué dans la sous-requête en utilisant ORDER BY COUNT(DISTINCT dNum) DESC
:
<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>
Cette requête révisée sélectionne correctement les 10 % supérieurs des A_ID
valeurs en fonction du nombre de valeurs dNum
distinctes, puis utilise ces A_ID
valeurs pour filtrer la requête externe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!