繁体   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