33

私はこれを実行しようとしています:

UPDATE test 
SET col2=1 WHERE col1='test1', 
SET col2=3 WHERE col1='test2';

私が得ているエラー:

[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 '

私のテーブル:

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

,1行目の最後くらいのやつです。に変更したら;col2を認識しませんでした。1 つのクエリでこれを行うにはどうすればよいですか?

4

5 に答える 5

40

これは最も明確な方法です

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')
于 2014-03-18T22:27:26.960 に答える
1

または、 の構成casesが読み取り不能になった場合は、トランザクションを開始して、順次更新を行うことができます/すべきです。

これは通常、より単純な sql になります。ただし、最初のステートメントが行を作成し、その行が 2 番目のステートメントと一致すべきではない場合に一致する場合を除きます。ただし、これはあなたの例には当てはまりません。

于 2013-09-14T14:19:04.053 に答える