从选择语句 SQL 查询更新表

本文关键字:更新 查询 SQL 选择 语句 | 更新日期: 2023-09-27 17:56:25

我有三个表格,一个包含可用产品列表,其中包含产品价格等相关详细信息,另一个包含订单,最后一个包含特定订单详细信息,包括订单中购买的物品。

我正在尝试创建一个查询来计算订单的总价格,方法是将两个表与内部连接链接起来,然后使用该值更新订单表。我编写的代码包含语法错误,作为一个新手,我可能犯了一个明显的错误,但任何帮助将不胜感激。

 "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 = ? ";

我正在使用访问。我也忘了提?使用数据视图参数表示

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

编辑:使用PaqoGomez的建议将Total声明为值,我现在收到错误:查询表达式"0WHERE OrderTable.orderID = ?"中的语法错误(缺少运算符)。

从选择语句 SQL 查询更新表

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"