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