Maison > base de données > tutoriel mysql > Pourquoi ma sous-requête SQL dans une clause WHERE IN renvoie-t-elle « Une seule expression peut être spécifiée dans la liste de sélection » ?

Pourquoi ma sous-requête SQL dans une clause WHERE IN renvoie-t-elle « Une seule expression peut être spécifiée dans la liste de sélection » ?

DDD
Libérer: 2025-01-11 13:22:41
original
633 Les gens l'ont consulté

Why Does My SQL Subquery in a WHERE IN Clause Return

Sélection de sous-requête SQL dans la clause WHERE IN : Erreur de compréhension "Lorsque la sous-requête ne commence pas par EXISTS, une seule expression peut être spécifiée dans la liste de sélection"

Lorsque vous essayez d'ajouter une sous-requête à une clause WHERE IN, assurez-vous toujours que la sous-requête renvoie une seule colonne à des fins de comparaison. L'erreur « Une seule expression peut être spécifiée dans la liste de sélection lorsque la sous-requête ne commence pas par EXISTE » signifie que votre sous-requête renvoie plusieurs colonnes.

Pour corriger cela, examinons la requête donnée :

<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

La sous-requête entre parenthèses renvoie deux colonnes : A_ID et ud (nombre de valeurs dNum distinctes pour chaque A_ID). Cependant, la clause WHERE IN s'attend à ce qu'une seule colonne soit comparée à A_ID. Par conséquent, nous devons modifier 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>
Copier après la connexion

La sous-requête renvoie désormais une seule colonne, A_ID, qui peut être utilisée à des fins de comparaison dans la clause WHERE IN. De plus, nous pouvons supprimer la clause COUNT(DISTINCT dNum) AS ud car elle ne nécessite plus de sélectionner uniquement les 0,1 % supérieurs des valeurs A_ID.

Cette requête modifiée devrait résoudre l'erreur spécifiée et vous permettre de récupérer les résultats souhaités. N'oubliez pas que lorsque vous utilisez une sous-requête dans une clause WHERE IN, assurez-vous que la sous-requête renvoie uniquement les colonnes requises pour la comparaison.

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