[英]what's wrong with this query in SQL
我有以下查询:
UPDATE PRODUCT SET FIXEDCOST =
(Select PRICE from PRODUCTPROGRAM
where productID = PRODUCTID) * .6
WHERE FAMILY = 'Services'
我需要使用PRODUCTPROGRAM
表中Price的60%的值来更新PRODUCT
表的FIXEDCOST
字段。
这些表通过productID
关联。
该错误表明子查询中返回了多个错误。 关于如何解决此问题的任何想法? 在此先感谢您的帮助。
Tamer,在“ proudctprogram的选择价格”中得到了太多结果,您需要缩小范围或执行以下操作:
UPDATE PRODUCT A, PRODUCTPROGRAM B
SET A.FIXEDCOST = B.PRICE * .6
WHERE A.productID = B.PRODUCTID AND FAMILY ='Services'
试试看,让我知道。 马塞洛
虽然我不确定语法是否为100%,但您可能想首先尝试引用每个productId设置为PRODUCT.productid和PRODUCTPROGRAM.PRODUCTID的表。
嵌套查询将返回PRODUCTPROGRAM表中的所有记录,因为所有记录的PRODUCTID值均与其自身相等。
您必须指定要与PRODUCT表中的值进行比较:
UPDATE PRODUCT
SET FIXEDCOST =
(Select PRICE from PRODUCTPROGRAM
where productID = PRODUCT.PRODUCTID) * .6
WHERE FAMILY = 'Services'
UPDATE PRODUCT p
JOIN PRODUCTPROGRAM pp ON pp.productID = p.productID
SET p.FIXEDCOST = pp.PRICE *.6
WHERE p.FAMILY = 'Services'
UPDATE PRODUCT SET FIXEDCOST =
(Select TOP 1 PRICE from PRODUCTPROGRAM
where productID = PRODUCT.PRODUCTID) * .6
WHERE FAMILY = 'Services'
您的子查询必须返回多个值。
Select PRICE from PRODUCTPROGRAM
where productID = PRODUCTID
尝试限制子查询或在where子句中使用唯一键:
UPDATE PRODUCT SET FIXEDCOST =
(Select PRICE from PRODUCTPROGRAM
where productID = PRODUCTID LIMIT 1) * .6
WHERE FAMILY = 'Services'
使用表别名来避免歧义? 像UPDATE PRODUCT P SET FIXEDCOST =(从PRODUCTPROGRAM PP中选择价格,其中P.PRODUCTID = PP.PRODUCTID)...
我怀疑哪里陈述错了。 您的意思可能是:
where productID = PRODUCT.PRODUCTID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.