如何从数据库中的两个不同表中减去?

Posted

技术标签:

【中文标题】如何从数据库中的两个不同表中减去?【英文标题】:How to subtract from two different tables in database? 【发布时间】:2021-08-12 14:24:31 【问题描述】:

当我点击按钮时,它没有错误,但数据库没有改变任何东西

protected void btnBuyNow_Click(object sender, EventArgs e)

    using (SqlConnection con = new SqlConnection(CS))
    
        string id = Session["UserID"].ToString();
       
        con.Open();

        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = "UPDATE tblProducts SET PQuantity=t1.PQuantity-t2.Quantity FROM tblOrderProducts t2 INNER JOIN tblProducts t1 ON t2.OrderProID=t1.PID";

        cmd.ExecuteNonQuery();
       
        Response.Redirect("OrderConfirmation.aspx");
        con.Close();
    

查询:

UPDATE tblProducts
SET PQuantity = (t1.PQuantity - t2.Quantity)
FROM tblOrderProducts t2
INNER JOIN tblProducts t1 ON t2.OrderProID = t1.PID

【问题讨论】:

您在什么时候创建您的订单(即实际添加一条记录到tblOrderProducts )。我希望执行顺序是 1. 创建您的订单(在 tblOrders 中猜测) 2. 添加您的订单产品 3. 仅使用您刚刚创建的记录更新您的数量。 话虽如此,以这种方式管理您的数量并不是我会采用的方式。如果您跟踪您的购买和销售,那么您当前的库存(或过去任何给定日期的库存)可以根据这两个表计算,您无需担心根据您的产品。 如果您还处于数据库设计阶段,我真的建议您不要使用 tbl 前缀。虽然它是主观的并且是您的选择,但普遍的共识是它只会给您的 SQL 添加不必要的噪音 - Is adding the ‘tbl’ prefix to table names really a problem? 重新开始 - 并注意对您之前的问题提出的所有建议和 cmet。你只是没有学习好习惯,也没有考虑你的代码。在这里,您的代码暗示用户正在使用购物车(或至少是特定商品)。您的代码应该首先为购买创建订单,然后从您的库存中为该产品扣除适当的金额。您的代码会更新每个订单的每个产品。您至少在上一个问题中使用了正确的方法。 【参考方案1】:

尝试:

UPDATE t1
    SET PQuantity = (t1.PQuantity - t2.Quantity)
FROM tblProducts AS t1, tblOrderProducts AS t2
WHERE t2.OrderProID = t1.PID

【讨论】:

每个人都不鼓励使用旧式联接【参考方案2】:

我认为使用子查询对你有好处

UPDATE 
 SET PQuantity = (select PQuantity FROM tblProducts Where PID =t2.OrderProID ) - t2.Quantity)
FROM tblOrderProducts t2

【讨论】:

以上是关于如何从数据库中的两个不同表中减去?的主要内容,如果未能解决你的问题,请参考以下文章

如何从MS SQL Server 2012中的不同表中减去连续的行?

想从两个不同的表中减去两个日期,出现语法错误

从sql中的表中减去两个日期

如何从 django 中的两个不同表中返回数据?

熊猫:从数据透视表中的另一列中减去一列

从不同数据库中的两个表中复制(或使用)数据[重复]