2011-06-16 4 views
1

je la requête suivante:ce qui ne va pas avec cette requête dans SQL

UPDATE PRODUCT SET FIXEDCOST = 
    (Select PRICE from PRODUCTPROGRAM 
    where productID = PRODUCTID) * .6 
WHERE FAMILY = 'Services' 

J'ai besoin de mettre à jour le champ de la table PRODUCTFIXEDCOST avec 60% de la valeur des prix dans le tableau PRODUCTPROGRAM.

Les tables sont liées par productID.

L'erreur indique que plus d'un est renvoyé dans la sous-requête. Des idées sur la façon dont je pourrais résoudre ce problème? Merci d'avance pour votre aide.

+4

Alors qu'est-ce que le produit PRIX de PRODUCTPROGRAM où productID = PRODUCTID retour? Vu le nom de la table, je ne serais pas surpris de constater que productId n'était pas une colonne unique – BonyT

Répondre

2

Tamer, vous obtenez trop de résultats dans le « prix select de proudctprogram » vous devez le réduire ou faire quelque chose comme ceci:

UPDATE PRODUCT A, PRODUCTPROGRAM B 
SET A.FIXEDCOST = B.PRICE * .6 
WHERE A.productID = B.PRODUCTID AND FAMILY ='Services' 

Essayez cela et laissez-moi savoir. Marcelo

0

Votre sous-requête doit renvoyer plusieurs valeurs.

Select PRICE from PRODUCTPROGRAM 
where productID = PRODUCTID 
0

Essayez de limiter la sous-requête ou utilisez la clé unique dans la clause where:

UPDATE PRODUCT SET FIXEDCOST = 
    (Select PRICE from PRODUCTPROGRAM 
    where productID = PRODUCTID LIMIT 1) * .6 
WHERE FAMILY = 'Services' 
0

alias de table d'utilisation pour éviter toute ambiguïté? Comme UPDATE PRODUCT P SET FIXEDCOST = (SELECTIONNER LE PRIX A PARTIR DU PROGRAMME DES PRODUITS PP O WH P.PRODUCTID = PP.PRODUCTID) ...

0

Je suppose que l'instruction where est incorrecte. Vous voulez dire, sans doute:

where productID = PRODUCT.PRODUCTID 
1

Alors que je ne suis pas sûr que la syntaxe est de 100%, vous pouvez d'abord essayer de faire référence à quelle table chaque productId est réglé à dire Produit.IDProduit et PRODUCTPROGRAM.PRODUCTID.

1

La requête imbriquée renvoie tous les enregistrements de la table PRODUCTPROGRAM, car tous les enregistrements ont une valeur PRODUCTID égale à elle-même.

Vous devez spécifier que vous voulez le comparer à la valeur de la table PRODUIT:

UPDATE PRODUCT 
SET FIXEDCOST = 
    (Select PRICE from PRODUCTPROGRAM 
    where productID = PRODUCT.PRODUCTID) * .6 
WHERE FAMILY = 'Services' 
1
UPDATE PRODUCT p 
    JOIN PRODUCTPROGRAM pp ON pp.productID = p.productID 
SET p.FIXEDCOST = pp.PRICE *.6 
WHERE p.FAMILY = 'Services' 
1
UPDATE PRODUCT SET FIXEDCOST = 
    (Select TOP 1 PRICE from PRODUCTPROGRAM 
    where productID = PRODUCT.PRODUCTID) * .6 
WHERE FAMILY = 'Services' 
Questions connexes