我想使用行索引+email@gmail.com的格式更新整个email列。
这是我的表中的数据
| id | 电子邮件 |
|---|---|
| 12 | abc@gmail.com |
| 23 | pqr@gmail.com |
这是我想要的输出
| id | 电子邮件 |
|---|---|
| 12 | 1email@gmail.com |
| 23 | 2email@gmail.com |
我尝试了下面的查询,但没有得到我期望的输出。
;with C as ( select email,row_number() over(order by id asc) as rowid from cus ) update C set email = rowid+'email@gmail.com'
这不仅仅是3行,我的cus表中有超过500行。如果有人可以给我一个不需要循环的解决方案,那将更好。请帮我创建一个SQL查询。谢谢。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这似乎有效,但我相信还有一种更优雅的解决方案,不需要使用join...
完整测试
也许这就是你想要做的:
将你想要更新的表(
cus)与C的cte进行连接,然后进行相应的更新。这里有一个演示
@QisM对于
email不唯一时的语法提出了疑虑,由于OP没有提到,我同意如果email确实不唯一,这不是解决方案。因此,我对语法进行了轻微修改:现在
cte带有id,并且在JOIN C ON ..条件中,我添加了匹配id的检查。经过测试,如果电子邮件不唯一,这将修复该问题。