Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
SQL在一次更新中包含多个集合?_Sql_Sql Update - Fatal编程技术网

SQL在一次更新中包含多个集合?

SQL在一次更新中包含多个集合?,sql,sql-update,Sql,Sql Update,我有这样一个SQL字段: FIELD_A cat dog bird mole dog 我想更新 所有的狗都要哈巴狗 全鸟归猫头鹰 所有的猫都是安哥拉猫 显然,SQLUPDATE语句一次只允许一个SET条件 如何编写查询以一次性完成上述操作?使用CASE子句可以完成此操作。这里有一个例子 对于WHERE子句,CASE表达式中的ELSE子句是可选的或冗余的,但包含ELSE可以提高可靠性。一个更严重的错误是没有覆盖“上述任何一个”选项,并且发现所有未提及的内

我有这样一个SQL字段:

FIELD_A  
  cat     
  dog 
  bird
  mole
  dog
我想
更新

  • 所有的狗都要哈巴狗
  • 全鸟归猫头鹰
  • 所有的猫都是安哥拉猫
显然,SQL
UPDATE
语句一次只允许一个
SET
条件


如何编写查询以一次性完成上述操作?

使用CASE子句可以完成此操作。这里有一个例子


对于WHERE子句,CASE表达式中的ELSE子句是可选的或冗余的,但包含ELSE可以提高可靠性。一个更严重的错误是没有覆盖“上述任何一个”选项,并且发现所有未提及的内容都设置为空。

您能否详细说明
字段A在('dog'、'bird'、'cat')中的位置?为什么要包含WHERE
?@Steve:如果在CASE表达式中包含ELSE子句,那么没有强制要求包含WHERE子句。但是,如果您的表中有3000万行,而其中只有100万行在字段_A中包含“dog”、“cat”或“bird”,那么使用WHERE进行的更新将更新100万行而不是3000万行,这从根本上减少了您机器上的工作量。OTOH,如果你的桌子上有5行,这一点都不重要。像钟一样清晰,也就是说,非常清晰。再次感谢。对于WHERE子句,省略最后一个“default”列是安全的。您可以在
“angora”
之后添加
,字段a
,这样即使省略了WHERE子句,也是安全的。
UPDATE table_a
   SET field_a =
          DECODE (field_a,  'dog', 'pug',  'bird', 'owl',  'cat', 'angora')
 WHERE field_a IN ('dog', 'bird', 'cat');
UPDATE table_a
   SET field_a =
          DECODE (field_a,  'dog', 'pug',  'bird', 'owl',  'cat', 'angora')
 WHERE field_a IN ('dog', 'bird', 'cat');