Maison > base de données > tutoriel mysql > Pourquoi ma sous-requête SQL renvoie-t-elle « 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 ? »

Pourquoi ma sous-requête SQL renvoie-t-elle « 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 ? »

Susan Sarandon
Libérer: 2025-01-11 13:26:42
original
628 Les gens l'ont consulté

Why Does My SQL Subquery Return

Erreur de sous-requête SQL : expression unique dans la liste SELECT

Cette requête SQL génère une erreur :

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

Le message d'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 » indique un problème avec la clause SELECT de la sous-requête. La sous-requête tente de renvoyer deux colonnes : A_ID et COUNT(DISTINCT dNum). Lors de l'utilisation de IN (ou d'autres opérateurs de comparaison comme =, !=, etc.), la liste SELECT de la sous-requête ne doit contenir qu'une seule colonne.

Solution :

La requête corrigée ne doit renvoyer que A_ID de la sous-requête :

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

Remarquez les changements :

  • La clause SELECT de la sous-requête inclut désormais uniquement A_ID.
  • La clause ORDER BY, qui se trouvait auparavant dans la sous-requête, a été déplacée vers la requête externe. En effet, le ORDER BY d'origine tentait de trier les résultats de la sous-requête avant qu'ils ne soient utilisés dans la clause IN ; le tri doit s'appliquer à l'ensemble de résultats final.

Cette requête révisée sélectionne correctement le nombre de valeurs dNum distinctes où A_ID se trouve dans les résultats de la sous-requête. La sous-requête identifie efficacement les 10 % supérieurs des valeurs A_ID en fonction du nombre de dNum distincts, et la requête externe compte ensuite les valeurs dNum distinctes associées à ces A_ID sélectionnés. La clause ORDER BY finale trie les résultats en fonction du nombre de valeurs dNum distinctes.

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!

source:php.cn
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