我正试图这样做:
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;
第一行末尾有,
的内容。当我将其更改为;
时,它无法识别col2。如何在一个查询中执行此操作?
答案 0 :(得分: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')
答案 1 :(得分:4)
考虑使用INSERT-ODKU(ON DUPLICATE KEY UPDATE),因为它支持更新多行。
确保所有PK列的值都在VALUES()中。
在可行的情况下,使用来自从属的数据生成SQL。
答案 2 :(得分:3)
您可以在此
上使用CASE
UPDATE test
SET col2 = CASE WHEN col1 = 'test1' THEN 1 ELSE 3 END
WHERE col1 IN ('test1', 'test2')
或IF
(仅适用于MySQL
)
UPDATE test
SET col2 = IF(col1 = 'test1', 1, 3)
WHERE col1 IN ('test1', 'test2')
答案 3 :(得分:1)
或者,当cases
的构造变得太难以理解时,您可以/应该开始一个事务,然后按顺序执行更新。
这通常会导致更简单的sql,除非第一个语句创建的行然后在第二个语句不匹配时匹配。但是在你的例子中并非如此。
答案 4 :(得分:0)
我就这样做了:
UPDATE col1
(静态值),col2
(静态值)和col3
(不同的值)WHERE col4
具有不同的值AND col5
是静态的。< / p>
$someArray = ["a","b","c"];
$anotherArray = [1,2,3];
$sql = "UPDATE table SET col1 = '$staticValue1', col2 = '$staticValue2', col3 = CASE col4";
$sqlEnd = " END WHERE col4 IN (";
$seperator = ",";
for ( $c = 0; $c < count($someArray); $c++ ) {
$sql .= " WHEN " . "'" . $someArray[$c] . "'" . " THEN " . $anotherArray[$c];
if ( $c === count($someArray) - 1 ) {
$separator = ") AND col5 = '$staticValue5'";
}
$sqlEnd .= "'" . $someArray[$c] . "'" . $seperator;
}
$sql .= $sqlEnd;
$retval = mysqli_query( $conn, $sql);
if(! $retval ) {
/* handle error here */
}
MySql查询的输出字符串将是这样的:
UPDATE table SET col1 = '1', col2 = '2', col3 = CASE col4 WHEN 'a' THEN 1 WHEN 'b' THEN 2 WHEN 'c' THEN 3 END WHERE col4 IN ('a','b','c') AND col5 = 'col5'
答案 5 :(得分:-3)
UPDATE `wp_partners_tarif` SET `name`="name1",`cena`="1",`comisiya`="11" WHERE `id`=2;
UPDATE `wp_partners_tarif` SET `name`="name2",`cena`="2",`comisiya`="22" WHERE `id`=3;
UPDATE `wp_partners_tarif` SET `name`="name2",`cena`="3",`comisiya`="33" WHERE `id`=4