2011-06-16 36 views
1

我有以下查詢:有什麼錯此查詢在SQL

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

我需要的價格在PRODUCTPROGRAM表中數值的60%,以更新PRODUCT表的FIXEDCOST場。

該表格與productID相關。

錯誤指出在子查詢中返回了多於一個。任何想法如何我可以解決這個問題?預先感謝您的幫助。

+4

那麼,是什麼從PRODUCTPROGRAM選擇Price那裏=的productID返回PRODUCTID?鑑於表的名稱,我不會驚訝地發現,productId不是唯一的列 – BonyT 2011-06-16 19:55:49

回答

2

馴,你得到太多結果,在「選擇價格從proudctprogram」你需要它縮小或做這樣的事情:

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

嘗試這一點,讓我知道。 Marcelo

0

您的子查詢必須返回多個值。

Select PRICE from PRODUCTPROGRAM 
where productID = PRODUCTID 
0

嘗試限制子查詢,或者使用的唯一鍵的where子句中:

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

使用表別名以避免歧義?像更新產品P設置FIXEDCOST =(選擇價格從PRODUCTPROGRAM PP P.PRODUCTID = PP.PRODUCTID)...

0

我懷疑where語句是錯誤的。你的意思,大概是:

where productID = PRODUCT.PRODUCTID 
1

雖然我不知道語法,你可以先嚐試引用每個ProductID等於設置爲即PRODUCT.productid和PRODUCTPROGRAM.PRODUCTID該表100%。

1

嵌套查詢將返回PRODUCTPROGRAM表中的所有記錄,因爲所有記錄都具有等於其自身的PRODUCTID值。

您必須指定要比較它在產品表中的值:

UPDATE PRODUCT 
SET FIXEDCOST = 
    (Select PRICE from PRODUCTPROGRAM 
    where productID = PRODUCT.PRODUCTID) * .6 
WHERE FAMILY = 'Services' 
1
UPDATE PRODUCT p 
    JOIN PRODUCTPROGRAM pp ON pp.productID = p.productID 
SET p.FIXEDCOST = pp.PRICE *.6 
WHERE p.FAMILY = 'Services' 
1
UPDATE PRODUCT SET FIXEDCOST = 
    (Select TOP 1 PRICE from PRODUCTPROGRAM 
    where productID = PRODUCT.PRODUCTID) * .6 
WHERE FAMILY = 'Services'