在单个MySQL查询中更新多行

use*_*929 30 mysql sql

我试图运行这个:

UPDATE test 
SET col2=1 WHERE col1='test1', 
SET col2=3 WHERE col1='test2';
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
Run Code Online (Sandbox Code Playgroud)

我的桌子:

CREATE TABLE `test` (
    `col1` varchar(30) NOT NULL,
    `col2` int(5) DEFAULT NULL,
    PRIMARY KEY (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

这是,第一行结束时的事情.当我将其更改;为时,它无法识别col2.如何在一个查询中执行此操作?

小智 38

这是最明确的方式

UPDATE test
SET col2 = CASE col1
WHEN 'test1' THEN 1
WHEN 'test2' THEN 3
WHEN 'test3' THEN 5
END,
colx = CASE col1
WHEN 'test1' THEN 'xx'
WHEN 'test2' THEN 'yy'
WHEN 'test3' THEN 'zz'
END
WHERE col1 IN ('test1','test2','test3')
Run Code Online (Sandbox Code Playgroud)


Joh*_*Woo 3

你可以用CASE这个

UPDATE test 
SET col2 = CASE WHEN col1 = 'test1' THEN 1 ELSE 3 END 
WHERE col1 IN ('test1', 'test2')
Run Code Online (Sandbox Code Playgroud)

IFMySQL仅)

UPDATE test 
SET col2 = IF(col1 = 'test1', 1, 3)
WHERE col1 IN ('test1', 'test2')
Run Code Online (Sandbox Code Playgroud)