使用mysql workbench更新同一列中的多个值

pcrecxhr  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(382)

我需要运行mysql查询来更新stratodesk数据库。
我想要达到的目标是:我需要通过stratodesk更新一大堆瘦客户机pc,不幸的是没有批量更新来完成这一点,所以我直接使用mysql数据库。目标是更新使用的图像和更新模式。
我有两个mysql查询来完成这个任务,一个将更新图像本身,另一个将更新“图像更新模式”。
如果我运行第一个查询,它将更新图像,但如果然后运行第二个查询来更新图像更新模式,它将撤消第一个查询。我的计划是将两个查询组合在一起,并同时更新两个值。
我在google上搜索了一些,很多例子都是这样的(我知道这个例子并没有反映出我正在使用的数据库结构)。

UPDATE orders SET 
    listPrice = 0, 
    bloggerPrice = 0.00, 
    customerPrice = 0.00 
WHERE 
    orders.id = 245745

从此堆栈溢出主题
现在,这给我的印象是,每个值都作为单独的列存储在表“orders”中。我敢肯定,如果stratodesk的数据库遵循类似的模式,这会起作用,但事实并非如此。
它们将所有这些存储在一个名为“configvalue”的表中,这个表有两列代码”和“val”,这是我要更新的值所在的位置。
我需要更新a)图像

SET CONFIGVALUE.CODE = 'IMAGE',CONFIGVALUE.VAL="2.40.4130d-EEs-k305-181109"

b) 公告模式

SET CONFIGVALUE.CODE = "IMAGE_UPDATE_MODE", CONFIGVALUE.VAL=2

如我所说,如果我运行每个,那么它会更新数据库。但是,第二个查询似乎撤消了第一个查询。
我把他们结合在一起,以为这能解决我的问题,但事实并非如此。如果我把“image”的值用单引号括起来,就会得到一个关于截断不正确的双引号的错误。如果使用双引号,查询将更新“image\u update\u mode”,但对“image”值不做任何处理。
组合查询:

UPDATE IGNORE CONFIGVALUE JOIN CONFIGOBJECT on CONFIGOBJECT.COID=CONFIGVALUE.COID JOIN CLIENTSTATE on CONFIGOBJECT.COID=CLIENTSTATE.COID  JOIN STATUSVALUE on CLIENTSTATE.EID=STATUSVALUE.EID SET CONFIGVALUE.CODE = 'IMAGE', CONFIGVALUE.VAL='2.40.4130d-EEs-k305-181109', CONFIGVALUE.CODE = 'IMAGE_UPDATE_MODE', CONFIGVALUE.VAL=2 WHERE CONFIGOBJECT.PARENT=1221 AND CONFIGOBJECT.COTYPE=3 /*AND STATUSVALUE.VAL="HP t510 Thin Client"*/ AND CONFIGOBJECT.COID=895;

stratodesk数据库布局
我已经确信很多问题都来自于值都存储在同一列中的事实。在我看来,这些值应该有自己的列(可能有自己的表)。
第二个问题,基于stratodesk数据库布局,它看起来是否有任何形式的标准化?我还在想办法解决这个问题。我觉得这样做会容易得多,至少我看到的例子会更有意义。
有人知道我怎样才能做到这一点吗?或者以前有人试过这样的吗?如果有人这样做了,这个查询看起来是正确的还是有更干净的方法?我有几千个瘦客户端要更新,所以我想得到这个100%的工作之前,我开始更新所有的瘦客户端!
当做,
菲尔布

z0qdvdin

z0qdvdin1#

如果要更新行中另一行的值等于给定值的列,则应使用 WHERE 条款。
要更新图像:

UPDATE configvalue
       SET val = '2.40.4130d-EEs-k305-181109'
       WHERE code = 'IMAGE';

要更新图像更新模式:

UPDATE configvalue
       SET val = '2'
       WHERE code = 'IMAGE_UPDATE_MODE';

没有一个 WHERE 你改变主意 val 在所有行中。
如果你非常想把它作为一种说法,你可以用 CASE 表达式,如果代码与值对应的代码匹配,则返回新值,否则仅返回旧值。

UPDATE configvalue
       SET val = CASE code
                   WHEN 'IMAGE' THEN
                     '2.40.4130d-EEs-k305-181109'
                   WHEN 'IMAGE_UPDATE_MODE' THEN
                     '2'
                   ELSE
                     val
                 END
       WHERE code IN ('IMAGE',
                      'IMAGE_UPDATE_MODE');

相关问题