2017-03-09 31 views
1

我有唯一的列url url varchar(4),並且想要將其更新爲唯一的隨機字符串,但是存在重複項的問題。 所以我想創建這樣的循環,但有定位兩次同一個表的問題。更新表列與唯一字符串使用where exists statel

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); 

什麼是填補我的專欄,與單個查詢的最佳方式是什麼?

回答

1

您應該刪除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; 
+0

我嘗試之前,我添加EXISTS子句,它不只更新其中一些行的所有行,當它的重複條目保留NULL時。所以我基本上想要添加循環與EXISTS。 (我有〜250k行,並做改變表url列) – MarksW

+0

我擴展我的子字符串/長度相同的字符x3大小,並在單個查詢更新它,但我希望看到未來的項目正確的循環代碼。 – MarksW

+0

你不能在'UPDATE'語句中循環。你需要編寫一個腳本來做到這一點,或者一個存儲過程。 –