我有以下查询:
UPDATE PRODUCT SET FIXEDCOST =
(Select PRICE from PRODUCTPROGRAM
where productID = PRODUCTID) * .6
WHERE FAMILY = 'Services'
我需要使用PRODUCT
表格中价格的60%来更新FIXEDCOST
表格的PRODUCTPROGRAM
字段。
表格与productID
相关。
错误表示子查询中返回了多个。关于如何解决这个问题的任何想法?提前感谢您的帮助。
答案 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