我有三个表,一个包含可用产品列表,其中包含产品价格等相关详细信息,另一个包含订单,最后一个包含特定订单详细信息,包括订单中购买的商品。
我正在尝试创建一个查询来计算订单的总价格,方法是将两个表格与内部联接相关联,然后使用该值更新订单表格。我写的代码包含语法错误,作为一个新手,我可能犯了一个明显的错误,但任何帮助都会受到赞赏。
"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 =?'中的语法错误(缺少运算符)。
答案 0 :(得分:3)
在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 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?
答案 1 :(得分:0)
通过声明变量,您可以保存总值,以便在以后的更新中使用它。
declare @Total int;
SELECT @Total = Sum(ProductTable.prodPrice)
//...
"SET " +
"totalPrice = @Total "
你没有提到你正在使用哪个数据库平台,我假设是MSSQL,其他平台需要稍微不同的语法。
您可能也有兴趣知道,如果您使用@
符号,则可以使用多行字符串。这将允许您避免您正在进行的连接。例如
var sql = @"some
sql
string"