Rumah > Soal Jawab > teks badan
P粉2014488982023-08-27 14:25:34
Ini nampaknya berkesan, tetapi saya percaya ada penyelesaian yang lebih elegan yang tidak memerlukan penggunaan 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 ;
Ujian Penuh
-- 创建表 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
Mungkin ini yang anda mahu lakukan:
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');
Sambungkan jadual (cus
)与C
的cte
) yang anda ingin kemas kini, dan kemudian kemas kini dengan sewajarnya.
@QisM memang bukan unik untuk email
不唯一时的语法提出了疑虑,由于OP没有提到,我同意如果email
, ini bukan penyelesaiannya. Jadi saya mengubah suai sedikit sintaks:
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');
Semak sekarangcte
带有id
,并且在JOIN C ON ..
条件中,我添加了匹配id
. Selepas ujian, ini akan membetulkan isu jika e-mel itu bukan unik.