【问题标题】:delete or update depending column value根据列值删除或更新
【发布时间】:2013-07-26 18:36:06
【问题描述】:

假设,我有一个 product 表。它有 product_idproduct_name 列。和 我有一张桌子product_purchase

pr_pur_id  product_id(FK)  pur_quantity
 1           170           6
 2           190           6
 3           270           0
 4           70            1
 5           10            6
 6           20            6

我有一个 product_sale 表。该表包含 pr_sale_idproduct_id(FK) 和 sale_quantity 列。

如果我想插入 product_id 已经在 product_purchase 表中的 product_sale,如果 product_purchase.pr_pur_id 应该删除 product_purchase.pr_pur_id strong>product_purchase.pur_quantity 为 0。如果 product_purchase.pur_quantity 大于 0,则减少取决于 product_sale.sale_quanity

如何根据 product_purchase.pur_quantity 列执行更新或删除查询?

【问题讨论】:

  • 您必须在服务器端(或客户端)代码中执行此操作。据我所知,没有办法强制 mySQL 决定执行UPDATEDELETE
  • 您可以编写一个存储过程来检查值并根据该过程来决定触发和更新或删除查询。
  • 我不确定我是否理解你,但我怀疑 REPLACEINSERT ... ON DUPLICATE KEY UPDATE 语句是你正在寻找的。​​span>
  • 如果您展示了您希望在各种情况下发生的事情的示例,将会有所帮助。
  • 我同意 Barman 的观点,您可能可以通过 insert on duplicate key 语句来完成这项工作

标签: mysql sql


【解决方案1】:

您是否考虑过简单地将0 可用计数留在该行中?然后,如果您以后需要参考此信息,它就会充当历史记录。唯一真正的缺点是您需要在查询中使用WHERE pur_quantity != 0 之类的子句过滤掉这些行。

【讨论】:

  • 但 pur_quanity=0 的额外记录将在下次不再需要。为什么我会保留垃圾记录?当额外的记录量很大时,它会影响我的数据库性能吗?
  • 它们是垃圾唱片吗?您永远不会想知道可用产品的历史?我们谈论多少行会显着影响性能?即使有大量记录,我想您也可以通过良好的索引来克服这个问题。
  • 好的,先生,我理解并有点担心。如果您是对的。我的数据库应该改变。 product_sale 表列应为 pr_sale_id 、 product_pur_id(FK) 和 sale_quantity.(not product_id)。哦,这个软件是为一家大鞋店准备的。他们至少有 5-1 万种不同的产品。对于购买产品报告,我的想法是从销售表中收集。可能这不是一个好主意。谢谢。
  • 只有您可以根据您的客户和应用程序的需求来确定。所以也许删除它们是正确的做法;那是你决定的。我只是指出,保留历史信息通常很有价值,尤其是在这样做的成本很小的情况下。附带说明一下,对于关系数据库来说,5 到 1 万行听起来并不多。有关关系数据库“很多”的更多详细信息,请参阅此问题:stackoverflow.com/questions/5350581/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多