簡體   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