繁体   English   中英

SQL中的此查询有什么问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM