单个数据库查询中的多sql更新

时间:2011-08-11 16:53:24

标签: mysql sql performance

在Mysql中是否可以将此查询转换为1个查询?

UPDATE users SET users.title =1 WHERE  users.oldId =  'adab01' LIMIT 1 ; 
UPDATE users SET users.title =2 WHERE  users.oldId =  'agok01' LIMIT 1 ; 
UPDATE users SET users.title =1 WHERE  users.oldId =  'alla01' LIMIT 1 ; 
UPDATE users SET users.title =2 WHERE  users.oldId =  'allm01' LIMIT 1 ;

SELECT中与此类似的东西:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")

这在MySql中可行吗?

只是让你知道我想要做什么:

我正在读这篇文章,跳转到(避免在循环中进行SQL查询)

http://code.google.com/speed/articles/optimizing-php.html

1 个答案:

答案 0 :(得分:2)

您需要使用CASE语句来执行此操作,并且它不会非常漂亮:

UPDATE USER SET USER.title = (CASE USER.oldId
                              WHEN 'adab01' THEN 1
                              WHEN 'agok01' THEN 2
                              WHEN 'alla01' THEN 1
                              WHEN 'allm01' THEN 2 
                              ELSE USER.oldID end)
WHERE USER.oldId in
(
    'adab01',
    'agok01',
    'alla01',
    'allm01'
)

请注意,WHERE是可选的,因为没有它,数据不应该被不必要地更改,但它也会“触摸”表中的每一行而不仅仅是那些需要更新。