簡體   English   中英

從Select語句Sql查詢更新表

[英]Update Table From Select Statement Sql Query

我有三個表,一個表包含可用產品的列表,其中包含產品價格等相關詳細信息,另一個表包含訂單,最后一個表包含特定訂單明細,包括訂單中購買的商品。

我正在嘗試創建一個查詢,以通過將兩個表與一個內部聯接鏈接,然后用該值更新定單來計算定單的總價。 我編寫的代碼包含語法錯誤,作為一個新手,我可能犯了一個明顯的錯誤,但是可以提供任何幫助。

 "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。 我也忘了提? 使用Dataview參數表示

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

編輯:使用PaqoGomez的建議將Total聲明為一個值,我現在得到錯誤:查詢表達式'0WHERE OrderTable.orderID =?'中的語法錯誤(缺少運算符)。

在OP之前進行的評論將其描述為MS Access:尚未嘗試過,但是您選擇並更新了錯誤的方式。 這應該非常接近。 對我來說已經有一段時間了,但是您可能需要更改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" 

更新:

基於與MS Access有關的OP更新,您可以使用子查詢進行更新,但是我認為這取決於您正在使用的MS Access版本以及您的操作方式。 下面的帖子似乎表明這是有問題的:

SQL子查詢(Microsoft Access SQL)

如何在Access中使用子查詢執行更新查詢?

可以完成-使用子查詢訪問2007 SQL更新查詢嗎?

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

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

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

您可能還想知道,如果使用@符號,則可以使用多行字符串。 這將使您避免進行的串聯。 例如。

var sql = @"some
              sql
            string"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM