Mysql 是否可以将此合并到一个查询中?
我正在更新2列和多行。目前,我正在运行两个不同的查询来完成这项工作。可以在一个查询中完成吗Mysql 是否可以将此合并到一个查询中?,mysql,sql,Mysql,Sql,我正在更新2列和多行。目前,我正在运行两个不同的查询来完成这项工作。可以在一个查询中完成吗 UPDATE `messages` SET `from_delete` = NOW() WHERE `thread_hash` = 'abc' AND `from_user_id` = '6' UPDATE `messages` SET `to_delete` = NOW() WHERE `thread_hash` = 'abc' AND `to_user_id` = '6' 是的,这是可能的,但很棘
UPDATE `messages` SET `from_delete` = NOW() WHERE `thread_hash` = 'abc' AND `from_user_id` = '6'
UPDATE `messages` SET `to_delete` = NOW() WHERE `thread_hash` = 'abc' AND `to_user_id` = '6'
是的,这是可能的,但很棘手:
UPDATE `messages`
SET `from_delete` = IF(`from_user_id` = '6',NOW(),`from_delete`)
, `to_delete` = IF(`to_user_id` = '6',NOW(),`to_delete` )
WHERE (`thread_hash` = 'abc' AND `from_user_id` = '6')
OR (`thread_hash` = 'abc' AND `to_user_id` = '6')
“诀窍”是在赋值中使用条件。如果该行不应更新,则将该列的当前值指定给该列进行“无更改”操作
为了完整性,您可能需要将thread_哈希上的条件添加到条件。尽管这不会改变查询的任何内容:
UPDATE `messages`
SET `from_delete` = IF(`thread_hash` = 'abc' AND `from_user_id` = '6'
,NOW(),`from_delete`)
, `to_delete` = IF(`thread_hash` = 'abc' AND `to_user_id` = '6'
,NOW(),`to_delete` )
WHERE (`thread_hash` = 'abc' AND `from_user_id` = '6')
OR (`thread_hash` = 'abc' AND `to_user_id` = '6')
什么是
it
?您可以共享任何代码来告诉我们有关it
?从简单的英语描述查询条件开始,您会发现这非常困难…两个查询似乎是解决此问题的合适方法\Oops抱歉,忘记添加查询了。现在应该修复了。@TGH:它回答了问题,是否可以在一个语句中执行此操作。我使用了这种技术,主要是为了提高性能和可伸缩性。更少的SQL语句意味着更少的数据库往返。我们只需要确保访问计划不会比这两个单独语句的访问计划“更糟”,我并不认为它解决了问题。然而,我想知道如果where子句增加了更多的复杂性,这种方法是否会产生难以维护的副作用。