2014-04-03 67 views
0

我有三個表,其中一個包含可用產品列表,其中包含產品價格等相關詳細信息,另一個包含訂單,最後一個包含特定訂單詳細信息,包括訂單中購買的物品。從選擇語句Sql查詢更新表

我想創建一個查詢來計算訂單的總價格,方法是將兩個表與一個內部聯接連接起來,然後用該值更新訂單表。我寫的代碼包含語法錯誤,作爲新手我可能犯了一個明顯的錯誤,但任何幫助,將不勝感激。

"SELECT Sum(ProductTable.prodPrice) AS Total, OrderDetailTable.orderID " + 
      "FROM ProductTable INNER JOIN OrderDetailTable " + 
      "ON ProductTable.prodID = OrderDetailTable.prodID " + 
      "GROUP BY OrderDetailTable.orderID " + 
      "HAVING OrderDetailTable.orderID = ? " + 
      "UPDATE OrderTable " + 
      "SET " + 
      "totalPrice = Total " + 
      "WHERE OrderTable.orderID = ? "; 

我正在使用Access。 我也忘了提及那個?使用PaqoGomez的建議,宣佈總的價值現在我得到的錯誤:語法錯誤(缺少操作員)在查詢表達式「0WHERE OrderTable.orderID =?」使用數據視圖參數

 pc.Add(new Parameter("?", TypeCode.Int32, basketId.ToString())); 

編輯表示。

+2

更新從查詢往往是供應商特定的。你使用的是什麼DBMS? –

+0

我正在使用Microsoft Access – user3495336

+0

對不起,但幾乎任何嘗試這樣做都會導致「操作必須使用可更新查詢」您可能會嘗試使用查詢並加入。 –

回答

0

通過聲明一個變量,您可以保存總值,以便您可以在以後的更新中使用它。

declare @Total int; 
SELECT @Total = Sum(ProductTable.prodPrice) 
//... 
"SET " + 
"totalPrice = @Total " 

你沒有提到你正在使用哪個數據庫平臺,我假設MSSQL,其他平臺將需要稍微不同的語法。

您可能還有興趣知道如果您使用@符號,則可以使用多行字符串。這可以讓你避免你正在進行的連接。例如。

var sql = @"some 
       sql 
      string" 
+0

對不起,這是Access。 – user3495336

+0

@ user3495336,該語法也適用於Access。請務必在帖子有用的時候註冊並標記爲答案!謝謝 – paqogomez

+0

@ user3495336,你找到答案了嗎? – paqogomez

2

評論OP之前作出形容,這是MS訪問: 沒有嘗試過這一點,但你有選擇和更新以錯誤的方式。這應該非常接近。它對我來說已經有一段時間了,但是您可能需要更改FROM子句以引用正在更新的表,並且INNER JOIN子選擇而不是WHERE子句。

"UPDATE OrderTable " + 
"SET totalPrice = Sum(ProductTable.prodPrice)" + 
"FROM (" + 
    "SELECT OrderDetailTable.orderID, Sum(ProductTable.prodPrice)" + 
    "FROM ProductTable INNER JOIN OrderDetailTable " + 
    "ON ProductTable.prodID = OrderDetailTable.prodID " + 
    "GROUP BY OrderDetailTable.orderID " + 
    ") x" + 
"WHERE x.orderID = OrderTable.OrderId" 

UPDATE:

根據有關的MS Access你可以用一個子查詢的更新,但我認爲這取決於MS訪問你的版本OP的更新使用和如何你做吧。下面的帖子似乎表明這是相當有問題的:

SQL Subqueries (Microsoft Access SQL)

How do I perform update query with subquery in Access?

Can It Be Done - Access 2007 SQL Update Query Using a Subquery?

+0

此語法對於Access並不完全接近。它做了類似'UPDATE T1 JOIN t2 SET t1.field = t2.field' –

+0

@ConradFrix同意。 OP發佈後更新了帖子,說它來自MS Access。我已更新帖子以嘗試添加一些幫助。 – sarin

+0

OP看起來像消失了。很好的答案,我會給你一個+1 – paqogomez