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 :
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.
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.
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>
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!