简体   繁体   English

SQL中的此查询有什么问题

[英]what's wrong with this query in SQL

I have the following query: 我有以下查询:

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

I need to update the PRODUCT table's FIXEDCOST field with 60% of the value of Price in the PRODUCTPROGRAM table. 我需要使用PRODUCTPROGRAM表中Price的60%的值来更新PRODUCT表的FIXEDCOST字段。

The tables are related by productID . 这些表通过productID关联。

The error says that more than one is returned in the subquery. 该错误表明子查询中返回了多个错误。 Any ideas as to how I could fix this? 关于如何解决此问题的任何想法? Thanks in advance for any help. 在此先感谢您的帮助。

Tamer, you are getting too many results in the "select price from proudctprogram" you need narrow it down or do something like this: Tamer,在“ proudctprogram的选择价格”中得到了太多结果,您需要缩小范围或执行以下操作:

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

Try that and let me know. 试试看,让我知道。 Marcelo 马塞洛

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

The nested query will return all records from the PRODUCTPROGRAM table, as all records have a PRODUCTID value that is equal to itself. 嵌套查询将返回PRODUCTPROGRAM表中的所有记录,因为所有记录的PRODUCTID值均与其自身相等。

You have to specify that you want to compare it to the value in the PRODUCT table: 您必须指定要与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'

Your sub query must be returning more than one value. 您的子查询必须返回多个值。

Select PRICE from PRODUCTPROGRAM 
where productID = PRODUCTID

Try limiting the subquery or use the unique key in the where clause: 尝试限制子查询或在where子句中使用唯一键:

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

Use table aliases to avoid ambiguity? 使用表别名来避免歧义? Like UPDATE PRODUCT P SET FIXEDCOST = (SELECT PRICE FROM PRODUCTPROGRAM PP WHERE P.PRODUCTID = PP.PRODUCTID) ... 像UPDATE PRODUCT P SET FIXEDCOST =(从PRODUCTPROGRAM PP中选择价格,其中P.PRODUCTID = PP.PRODUCTID)...

I suspect the where-statement is wrong. 我怀疑哪里陈述错了。 You mean, probably: 您的意思可能是:

where productID = PRODUCT.PRODUCTID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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