P粉2014488982023-08-27 14:25:34
這似乎有效,但我相信還有一個更優雅的解決方案,不需要使用join...
SELECT * FROM cus ; update cus inner join ( select id ,email,row_number() over(order by id asc) as rowid from cus )a on a.id = cus.id set cus.email = concat(a.rowid, a.email) ; SELECT * FROM cus ;
完整測試
-- 创建表 CREATE TABLE cus ( id INTEGER PRIMARY KEY, email TEXT NOT NULL ); -- 插入数据 INSERT INTO cus VALUES (0021, 'Clark'); INSERT INTO cus VALUES (0402, 'Dave'); INSERT INTO cus VALUES (005, 'Ava' ); SELECT * FROM cus ; update cus inner join ( select id ,email,row_number() over(order by id asc) as rowid from cus )a on a.id = cus.id set cus.email = concat(a.rowid, a.email) ; SELECT * FROM cus ;
P粉8850351142023-08-27 00:04:35
也許這就是你想要做的:
WITH C AS ( SELECT email,ROW_NUMBER() OVER(ORDER BY id ASC) AS rowid FROM cus ) UPDATE cus JOIN C ON cus.email=C.email SET cus.email=CONCAT(rowid,'email@gmail.com');
將你想要更新的表(cus
)與C
的cte
進行連接,然後進行對應的更新。
#@QisM對於email
不唯一時的語法提出了疑慮,由於OP沒有提到,我同意如果email
確實不唯一,這不是解決方案。因此,我對語法進行了輕微修改:
WITH C AS ( SELECT id, email, ROW_NUMBER() OVER(ORDER BY id ASC) AS rowid FROM cus ) UPDATE cus JOIN C ON cus.id=C.id AND cus.email=C.email SET cus.email=CONCAT(rowid,'email@gmail.com');
現在cte
帶有id
,並且在JOIN C ON ..
條件中,我加入了符合id
的檢查。經過測試,如果電子郵件不唯一,這將修復該問題。