mysql - 使用 where exists 语句更新具有唯一字符串的表列

标签 mysql

我有唯一的列 url varchar(4),并想将其更新为唯一的随机字符串,但遇到重复项目的问题。 所以我想创建类似这样的循环,但在定位两次相同的表时遇到问题。

UPDATE IGNORE word SET url = (SELECT GROUP_CONCAT(SUBSTRING('1234567890qwertyuiopasdfghjklzxcvbnm' , 1+ FLOOR(RAND()*LENGTH('1234567890qwertyuiopasdfghjklzxcvbnm'))     ,1) SEPARATOR '')   
FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) AS dummy_tbl) 
WHERE EXISTS (SELECT url FROM word WHERE url IS NULL);

使用单个查询填充我的列的最佳方法是什么?

最佳答案

您应该删除 EXISTS 子句并直接更新 NULL 行:

UPDATE
IGNORE word
SET url = ...
WHERE url IS NULL;

因此您的完整查询将是:

UPDATE
IGNORE word
SET url =
    (SELECT GROUP_CONCAT(SUBSTRING('1234567890qwertyuiopasdfghjklzxcvbnm', 
      1+ FLOOR(RAND()*LENGTH('1234567890qwertyuiopasdfghjklzxcvbnm')),1) SEPARATOR '')
     FROM
         (SELECT 1
          UNION SELECT 2
          UNION SELECT 3
          UNION SELECT 4) AS dummy_tbl)
WHERE url IS NULL;

关于mysql - 使用 where exists 语句更新具有唯一字符串的表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694286/

相关文章:

MySQL 变量作为带有其他表元素的子查询的结果

mysql - 在 MySQL : which workaround? 中存储微秒

mysql - 如何在必须检查多个属性的关系数据库中选择属性?

mysql - executescalar:对象无法从 DBNull 转换为其他类型

php - Mysql似乎从字符串中删除斜线

mysql - COUNT UNION 太多

mysql - SQL 查询总唯一点击数

mysql - 撤消 CTE(公用表表达式)

mysql - 在触发条件中插入 null 和字符串 'Null

mysql - 无法执行数据库迁移: org. sonar.db.version.v60.PopulateProfileKeyOfActivities