在 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 @Tatar:如果修复这个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 语句进行更新的主要内容,如果未能解决你的问题,请参考以下文章
使用 case 语句从 SELECT 更新记录。 (mysql)