当前位置: 首页 > 面试题库 >

MYSQL INSERT或UPDATE IF

龙高歌
2023-03-14
问题内容

现在已经在网上浏览了一段时间,似乎看不到任何与我想要的东西类似的东西。我知道这与我编写查询的方式有关,但是任何帮助将不胜感激。

我正在尝试做的基础知识是:

  • 如果表中不存在,则将其插入表中
  • 更新项目(如果存在)

它以以下格式存在:

名称,条形码,物品,数量,位置,价格和日期

名称-可以在多行条形码中使用-用于特定项目,但可以用作多个位置项目-与条形码相同,但包含名称数量-自我说明的位置-这可以是不同的位置价格-
附加到特定商品的日期-上一次购买该商品的时间

棘手的事情是,“名称”可以在不同的位置以不同的价格包含多个商品(条形码和商品)。这样的想法是,客户可以看到他们在设定的时间购买了多少商品,因此他们知道需要出售多少商品。

但是,他们购买的价格可能会有所不同,因此,如果价格与之前的购买价格不同,则需要在表格中创建另一行。

整件事背后的想法是要记录每个位置的每个项目的“名称”,然后记录他们在何时以及上次购买该项目时的价格。

希望这是有道理的。

在伪代码中:

    Insert into table if does not exist
    - name, barcode, item, quantity, location, price and date
    If name, barcode, item, location and price are the same
    - Update quantity and date (if more recent)

问题答案:

首先,UNIQUE在名称,条形码,商品,位置和价格上添加一个约束。

ALTER TABLE  tableX
  ADD CONSTRAINT tableX_UQ
    UNIQUE (name, barcode, item, location, price) ;

然后,您可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE

INSERT INTO tableX
  (name, barcode, item, location, price, quantity, date)
VALUES
  (?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
  quantity = CASE WHEN VALUES(date) > date
               THEN quantity + VALUES(quantity)        -- add quantity
               ELSE quantity                           -- or leave as it is
             END
, date = CASE WHEN VALUES(date) > date
               THEN VALUES(date) ;                     -- set date to new date
               ELSE date                               -- or leave as it is
             END

REPLACE也可以使用,但是行为有所不同(如果您具有外键,则尤为重要)。



 类似资料:
  • 问题内容: 定义简单单击JButton的行为时,哪种方法正确?而且,有什么区别? 要么 问题答案: 是Swing中的低级事件侦听器(顺便说一下,也是AWT)。 是更高级别的,应该使用。 比起更好的选择,应该使用(实际上是)。 使用允许在多个小部件(例如,…)之间共享它;您不仅可以共享按下按钮/菜单时触发的代码,还可以共享状态,尤其是可以共享操作(及其关联的小部件)是否处于启用状态。

  • 连接的多个输入有一个为Yes则输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:逢15就猫叫 工作原理 当输入为“yes”时,“或”节点为“yes”。 例如:一种报警装置,当被暴露在光强下(光强大于30),或者被移动(陀螺仪被震动)时报警。 请注意上面的程序等于: 提示 事实上,你不需要经常使用“或”节点,因为“或”逻

  • 下面是代码的味道:https://scastie.scala-lang.org/bQMGrAKgRoOFaK1lwCy04g 我有两个JSON APIendpoint。首先是项目。cgi以以下格式返回项目对象列表 表示项目没有借款人。 其次,用户。cgi,返回查询参数id指定的用户 API可能不好,但我必须处理它。现在在Scala中,我想使用这个漂亮的数据模型 我还有以下用于执行HTTP请求的方法

  • AspectJ意味着它的另一个AOP实现不是基于spring的,如果我们想使用它,那么除了spring之外,我们还需要包括一些第三方JAR。 Spring AOP注释意味着Spring使用AspectJ注释来提供AOP特性。 这些假设公平吗?

  • 问题内容: 我目前正在使用“设置”结构使用Redis。 我想知道是否有可能自动清理空的“ set”吗? 否则找到一个cron /进程来定期清理空的“ set” 更新: 更笼统的问题是,“(nil)”和“(空列表或集合)”之间存在差异(内存使用情况) 例: 要么 问题答案: 这已经是自动的。如果集合为空,则将其从名称空间中删除。 您不必执行任何特定操作即可从此行为中受益。 要回答第二个问题,(nil

  • 问题内容: 我有这个表达: 这些元素的(,,)有优先权? 您能用方括号显示操作顺序吗? 问题答案: 首先,然后,然后。 您的表情将被评估为。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

  • 当我尝试运行gradle项目时,我收到以下错误消息: 项目配置的yml文件如下所示: 我尝试用gradlew bootRun运行项目,但不可能启动项目。也许这是一些依赖项版本的问题,但我不是很确定。 编辑:

  • 我正在通过以下方式向RecyclerView插入值 但该项目未插入或我在UI中未显示任何更新 有谁能帮我解决这个问题吗 当插入或删除任何新用户时,将执行此UserEvents接口的方法 但不知道为什么回收器不更新