SQL中的这个查询有什么问题

时间:2011-06-16 19:53:59

标签: mysql sql sql-update

我有以下查询:

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

我需要使用PRODUCT表格中价格的60%来更新FIXEDCOST表格的PRODUCTPROGRAM字段。

表格与productID相关。

错误表示子查询中返回了多个。关于如何解决这个问题的任何想法?提前感谢您的帮助。

9 个答案:

答案 0 :(得分:2)

驯兽师,你在“骄傲计划的选择价格”中获得的结果太多了,你需要缩小范围或做类似的事情:

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

试试并告诉我。 马塞洛

答案 1 :(得分:1)

虽然我不确定语法是否为100%,但您可能需要先尝试引用每个productId设置的表格,即PRODUCT.productid和PRODUCTPROGRAM.PRODUCTID。

答案 2 :(得分:1)

嵌套查询将返回PRODUCTPROGRAM表中的所有记录,因为所有记录的PRODUCTID值都等于自身。

您必须指定要将其与PRODUCT表中的值进行比较:

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

答案 3 :(得分:1)

UPDATE PRODUCT p
    JOIN PRODUCTPROGRAM pp ON pp.productID = p.productID
SET p.FIXEDCOST = pp.PRICE *.6
WHERE p.FAMILY = 'Services'

答案 4 :(得分:1)

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

答案 5 :(得分:0)

您的子查询必须返回多个值。

Select PRICE from PRODUCTPROGRAM 
where productID = PRODUCTID

答案 6 :(得分:0)

尝试限制子查询或使用where子句中的唯一键:

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

答案 7 :(得分:0)

使用表别名来避免歧义?像UPDATE PRODUCT P SET FIXEDCOST =(从PRODUCTPROGRAM PP中选择价格P.PRODUCTID = PP.PRODUCTID)......

答案 8 :(得分:0)

我怀疑where-statement是错误的。你的意思是,可能:

where productID = PRODUCT.PRODUCTID