使用Case stmt更新表

时间:2013-12-09 18:07:43

标签: mysql sql

这是我一直在努力的有趣的项目。我添加了一个重量列(op1w到op12w)以符合描述(op_1到op_12)。现在我需要返回并使用适当的op1w更新所有条目到op12w,具体取决于op_1到op_12。这是drop_log表的一部分,包含这些列。

enter image description here

以下是要匹配的值以及将op1w更新为op12w的内容(这在db中称为mechs的表中存在):

mech    weight
AS7 100
AWS 80
BJ  45
BLR 85
CDA 40
CN9 50
COM 25
CPL 65
CTF 70
DISC    0
DRG 60
GRF 55
HBK 50
HGN 90
JM6 65
JR7 35
KTO 55
LCT 20
ON1 75
QKD 60
RVN 35
SDR 30
SHD 55
STK 85
TBT 50
TDR 65
VTR 80
WVR 55

你能帮我解决一下这个案例陈述吗?我相信应该开始这样的事情:

UPDATE drop_log
SET
op1w =(case when some_case_condition then something else op1w end),
op2w =(case when some_case_condition then something else op2w end)
.

感谢您的帮助。

编辑:看完评论后确定,这是我的参与

UPDATE drop_log
SET op1w= 
CASE 
    WHEN op_1 = 'AS7'
      THEN op1w = 100
    WHEN op_1 = 'AWS'
      THEN op1w = 80
    .
    .
    .
    ELSE op_1
    END
CASE
    WHEN op_12 = etc
     THEN op12w = etc
    .
    .
    .
    ELSE op_12
END

好的,现在我看到你们在说什么..不,我不希望你为我填写它们。对于每列1-12,这将继续进行,然后每列对每种重量可能性都有自己的情况。这就是它的全部吗?我以为会更多参与。

1 个答案:

答案 0 :(得分:0)

您的查询的一般格式应为:

UPDATE drop_log
SET op1w = CASE
            WHEN op_1 = 'AWS' THEN '1'
            WHEN op_2 = 'ABC' THEN op1
            ELSE '0'
          END,
    op2w = CASE
            WHEN op_1 = 'HDP' THEN op_1
            ELSE '0'
          END