在 Mysql 中使用 select 语句进行更新

Posted

技术标签:

【中文标题】在 Mysql 中使用 select 语句进行更新【英文标题】:Make Update with select statement in Mysql 【发布时间】:2015-05-29 20:21:53 【问题描述】:

我正在尝试更新数据库中某些产品的类别。但我得到一个错误,我不明白我的陈述哪里错了。请帮忙。我想查找名称中包含特定单词的产品,然后我要更新此产品的类别。

我想从 sho_posts 中选择 ID,其中 sho_posts.post_title 包含单词“%Audio CD%”的这一部分,然后将 sho_term_relationships.term_taxonomy_id 更新为值为 2,其中 sho_term_relationships.object_id=sho_posts.id

UPDATE sho_term_relationships 
   SET term_taxonomy_id = 2
 WHERE object_id = (SELECT `id` FROM `1876522_shoping`.`sho_posts` WHERE CONVERT(`post_title` USING utf8) LIKE '%Audio CD%') 

【问题讨论】:

- 子查询返回多于 1 行 【参考方案1】:

在您的 WHERE 子句中,要根据子查询结果查找要更新的 id,请使用 IN 而不是 =

UPDATE sho_term_relationships 
   SET term_taxonomy_id = 2
   WHERE object_id IN (
      SELECT `id` FROM `1876522_shoping`.`sho_posts` 
      WHERE CONVERT(`post_title` USING utf8) LIKE '%Audio CD%') 

只有在您确定子查询将返回单行时才使用=,如果子查询返回多行,它将不起作用。使用IN测试对象id是否包含在子查询结果中。

【讨论】:

现在我收到错误“重复条目 '3205-2' 键 'PRIMARY'” 这个参数选择'%Audio CD%' 我有4个项目 我想在 sho_posts.post_title 中找到包含单词“'%Audio CD%'”的项目,然后获取 ID @Tata​​r:如果修复这个sql导致重复输入错误,term_taxonomy_id是主键吗?您不能更新 2 行以使用相同的主键,这根本没有任何意义。 你能解释一下你的意思吗?【参考方案2】:

更新多行时,您只需要使用 'in' 而不是 '='。

更新 sho_term_relationships SET term_taxonomy_id = 2 WHERE object_id in (SELECT id FROM 1876522_shoping.sho_posts WHERE CONVERT(post_title USING utf8) LIKE '%Audio CD%')

【讨论】:

我得到了这个错误“重复的条目 '3205-2' for key 'PRIMARY'”

以上是关于在 Mysql 中使用 select 语句进行更新的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中update select更新数据

MySql UPDATE更新语句备忘

使用 case 语句从 SELECT 更新记录。 (mysql)

MySQL 中的多个同时 SELECT 语句

MySQL存储过程中使用SELECT …INTO语句为变量赋值

MYSQL存储过程select语句select不正确的ID