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
Libérer: 2025-01-11 13:36:42
original
387 Les gens l'ont consulté

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 :

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)
Copier après la connexion

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 :

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)
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal