Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以将此合并到一个查询中?_Mysql_Sql - Fatal编程技术网

Mysql 是否可以将此合并到一个查询中?

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' 是的,这是可能的,但很棘

我正在更新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` = 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子句增加了更多的复杂性,这种方法是否会产生难以维护的副作用。