Maison > base de données > tutoriel mysql > Pourquoi ma sous-requête SQL génère-t-elle une erreur « Une seule expression autorisée » ?

Pourquoi ma sous-requête SQL génère-t-elle une erreur « Une seule expression autorisée » ?

Patricia Arquette
Libérer: 2025-01-11 13:17:42
original
588 Les gens l'ont consulté

Why Does My SQL Subquery Produce an

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

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

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!

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