2011-08-08 3 views
0

La société d'hébergement Web a modifié ma version Php Myadmin pendant le week-end et le code de mise à jour que j'ai utilisé depuis un an pour mettre à jour le stock dans Mysql ne fonctionne plus.Syntaxe de mise à jour SQL

Code Orig

update uc_product_stock x set x.stock = (select y.stock from import y where trim(x.SKU) = trim(y.SKU)) 

Il apporte maintenant de retour l'erreur suivante

#1242 - Subquery returns more than 1 row 

Merci d'avance pour toute aide à ce sujet.

+3

Etes-vous sûr que ce n'est pas censé revenir plus d'une rangée? Qu'est-ce que vous obtenez lorsque vous exécutez la sous-requête de son propre chef. –

Répondre

2
UPDATE x 
    SET x.stock = y.stock 
    FROM uc_product_stock x 
     INNER JOIN import y 
      ON TRIM(x.SKU) = TRIM(y.SKU)) 
+1

Cela ne donnera-t-il pas encore plusieurs valeurs par ligne X dans Y? – JNK

+0

@JNK - Cela devrait fonctionner, mais ça va mettre à jour x.stock à l'une des valeurs de y.stock – Lamak

+0

+1 - C'est toujours une solution de contournement. Probablement devrait lui faire savoir qu'il aura des valeurs indéterminées dans le domaine mis à jour cependant. – JNK

2

Votre sous-requête renvoie plusieurs valeurs et SQL ne sait pas lequel vous souhaitez affecter à votre ligne.

Vous devez obtenir que la sous-requête renvoie des valeurs uniques.

Les options sont:

  • Faire la sous-requête plus spécifique (ajoutez WHERE supplémentaires filtres, JOIN, etc.)
  • Utilisez une clause TOP seulement retourner une ligne - SELECT TOP 1....