Maison >base de données >tutoriel mysql >Pourquoi ma sous-requête SQL génère-t-elle l'erreur « Une seule expression peut être spécifiée dans la liste de sélection » ?
Dépannage des erreurs de sous-requête SQL : "Une seule expression peut être spécifié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 lorsque votre requête SQL utilise une sous-requête dans une clause IN
et que la sous-requête tente de renvoyer plusieurs colonnes. . L'opérateur IN
n'accepte qu'une seule colonne à des fins de comparaison.
Examinons la requête problématique :
<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>
L'instruction interne SELECT
renvoie incorrectement à la fois A_ID
et COUNT(DISTINCT dNum) AS ud
. Cela viole la règle relative aux sous-requêtes utilisées avec IN
.
La requête corrigée :
La solution consiste à restructurer la sous-requête pour renvoyer uniquement la colonne 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>
Cette requête révisée sélectionne désormais correctement uniquement A_ID
dans la sous-requête, résolvant ainsi l'erreur. Le classement par COUNT(DISTINCT dNum)
est géré dans la sous-requête elle-même, garantissant que les 10 % supérieurs des valeurs A_ID
(basées sur les COUNT(DISTINCT dNum)
sont sélectionnés.
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!