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 » ?

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 » ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-11 13:36:42361parcourir

Why Does My SQL Subquery Produce

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn