首页 > 解决方案 > 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 

标签: phpmysql

解决方案


您可以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 ... ), '')

dbfiddle 上的演示


推荐阅读