Maison > base de données > tutoriel mysql > Comment résoudre l'erreur « La sous-requête a renvoyé plus d'une valeur » dans SQL Server ?

Comment résoudre l'erreur « La sous-requête a renvoyé plus d'une valeur » dans SQL Server ?

Barbara Streisand
Libérer: 2025-01-17 15:21:09
original
426 Les gens l'ont consulté

How to Resolve the

Dépannage de l'erreur « La sous-requête a renvoyé plusieurs valeurs » dans SQL Server

Les sous-requêtes SQL Server utilisées dans les opérateurs de comparaison (comme '=') doivent donner une valeur unique. Plusieurs valeurs déclenchent l'erreur : « La sous-requête a renvoyé plus d'une valeur. » Explorons des solutions.

Étapes de débogage :

  1. Validation des résultats de la sous-requête : La sous-requête ne doit renvoyer qu'une seule ligne et une seule colonne. Examinez attentivement la requête pour détecter les données ambiguës ou en double qui pourraient produire plusieurs résultats.

  2. Révision des conditions de jointure : Assurez-vous que les conditions de jointure entre la requête principale et la sous-requête créent une relation un-à-un. Supprimez les critères de jointure redondants ou inutiles.

  3. Fonctions d'agrégation/regroupement : Si votre sous-requête utilise des fonctions d'agrégation (comme SUM, AVG, COUNT) ou de regroupement, confirmez leur application correcte et qu'elles génèrent une valeur de sortie unique.

Exemple et solution :

L'exemple fourni montre une sous-requête renvoyant plusieurs valeurs de coût, à l'origine de l'erreur. La solution utilise TOP 1 pour limiter la sortie de la sous-requête à une seule ligne :

<code class="language-sql">SELECT
    orderdetails.sku,
    orderdetails.mf_item_number,
    orderdetails.qty,
    orderdetails.price,
    supplier.supplierid,
    supplier.suppliername,
    supplier.dropshipfees,
    cost = (SELECT TOP 1 supplier_item.price
           FROM   supplier_item
           WHERE  supplier_item.sku = orderdetails.sku
                  AND supplier_item.supplierid = supplier.supplierid)
FROM   orderdetails
       INNER JOIN supplier ON supplier.supplierid = orderdetails.mfr_id
       INNER JOIN group_master ON group_master.sku = orderdetails.sku  
WHERE  invoiceid = '339740'</code>
Copier après la connexion

L'utilisation de TOP 1 garantit qu'une seule ligne (et donc un prix) est renvoyée, résolvant ainsi l'erreur. Notez que TOP 1 sans clause ORDER BY renvoie une ligne arbitraire ; pensez à ajouter ORDER BY pour des résultats cohérents si l'ordre est important.

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