Cara untuk mengemas kini keseluruhan lajur menggunakan indeks baris dan nilai berkod keras dalam Mysql
P粉362071992
P粉362071992 2023-08-26 15:24:30
0
2
370

Saya ingin mengemas kini keseluruhan lajur e-mel menggunakan format indeks baris + email@gmail.com.

Ini ialah data dalam jadual saya

id E-mel
12 abc@gmail.com
23 pqr@gmail.com

Ini adalah output yang saya mahu

id E-mel
12 1email@gmail.com
23 2email@gmail.com

Saya mencuba pertanyaan di bawah tetapi tidak mendapat output yang saya jangkakan.

;dengan C sebagai ( pilih e-mel,row_number() over(order by id asc) sebagai rowid daripada cus ) kemas kini C tetapkan e-mel = rowid+'email@gmail.com'

Itu bukan hanya 3 baris, saya mempunyai lebih 500 baris dalam jadual cus Adalah lebih baik jika seseorang boleh memberi saya penyelesaian yang tidak memerlukan gelung. Tolong bantu saya membuat pertanyaan SQL. Terima kasih.

P粉362071992
P粉362071992

membalas semua (2)
P粉201448898

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粉885035114

    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)与Ccte) yang anda ingin kemas kini, dan kemudian kemas kini dengan sewajarnya.

    Berikut ialah demo

    @QisM memang bukan unik untukemail不唯一时的语法提出了疑虑,由于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 isujika e-mel itu bukan unik.

      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!