2015-11-06 96 views
0
ALTER TABLE order_t ADD Totalfixed DECIMAL(7,2); 

UPDATE Order_t 
    SET Totalfixed = (
     SELECT orderid, SUM(price * quantity) AS tf 
     FROM 
      orderline ol, 
      product p 
     WHERE 
      ol.productid = p.productid 
      AND ol.orderid = orderid 
     GROUP BY orderid 
    ); 

一切更新列獨立工作正常,但我得到:使用子查詢

操作數應包含1列

如果我從子查詢中刪除orderid,我得到:

子查詢返回多於一行

反正有沒有join這個工作?

+0

您應該正確地使用您正在使用的數據庫(SQL Server?或MySQL?)標記您的問題。我刪除了無關標籤並添加了更一般的「sql」。在這個特定情況下,答案恰好相同。 –

+0

對不起,感謝您的幫助! – Espy

回答

0

無論數據庫如何,上下文都需要一個標量子查詢。這意味着避免了group by並返回只有一列:所以它是指外部查詢

UPDATE Order_t 
    SET Totalfixed = (
     SELECT SUM(price * quantity) AS tf 
     FROM orderline ol JOIN 
      product p 
      ON ol.productid = p.productid 
     WHERE ol.orderid = Order_t.orderid 
    ); 

我也固定JOIN語法(總是使用顯式連接)及相關條款。

+0

謝謝,這工作得很好。 – Espy

+0

@Espy請標記爲已回答 – vishalvatsal

0
UPDATE A 
SET Totalfixed = SUM(price * quantity) 
FROM Order_t A 
INNER JOIN orderline ol ON ol.orderid = A.orderid 
INNER JOIN product p ON ol.productid = p.productid