php - MySQL UPDATE 查询 - 仅更新非重复项
问题描述
此查询工作正常。我现在想向它添加另一个“规则”。我要添加的规则是更新tran_term_taxonomy
. description
只有不重复的记录。解释稍有不同,如果tran_term_taxonomy
. description
包含字符串“the cat crossed the road”,则在后续更新过程中不要再添加“the cat crossed the road”。我该怎么做呢?谢谢。
UPDATE `tran_term_taxonomy` SET `description` = (SELECT keyword from `good_keywords` ORDER BY RAND() LIMIT 1,1) WHERE `tran_term_taxonomy`.`taxonomy` = 'post_tag' AND `tran_term_taxonomy`.`description` = '' LIMIT 1
解决方案
您可以NOT EXISTS
在子查询中使用检查来确定keyword
之前是否已将 用作description
值:
UPDATE `tran_term_taxonomy`
SET `description` = (
SELECT keyword
FROM `good_keywords`
WHERE NOT EXISTS (SELECT * FROM (SELECT * FROM `tran_term_taxonomy`) t WHERE description = keyword)
ORDER BY RAND()
LIMIT 1
)
WHERE `tran_term_taxonomy`.`taxonomy` = 'post_tag'
AND `tran_term_taxonomy`.`description` = ''
LIMIT 1
请注意,如果您用完关键字,这将description
使用 更新值NULL
。为避免这种情况,请将子查询包装在 a 中COALESCE
:
COALESCE((SELECT keyword ... ), '')
推荐阅读
- c# - 如何使用 webhook 在 SharePoint 网站上获取更改?
- polymer - 如何将旧版本的 LitElement 转换为新版本
- django - django模型中的条件选择字段
- javascript - 如何修复 Chrome DevTools 中的 JavaScript?
- c# - InvalidOperationException:尝试激活“UnitOfWork”时无法解析“DataAccessContext”类型的服务
- c++ - 棘手的按值传递和按引用传递递归问题
- java - Clojure `from-java` 的自定义访问器策略
- tcp - EG getting restarted when ESB tries to fetch data from an external system over TCPIP connection for more than 59 times
- java - 需要使用正则表达式检查通配符
- php - MYSQL 两张表,每个用户在块内显示