Möglichkeit, die gesamte Spalte mithilfe des Zeilenindex und des fest codierten Werts in MySQL zu aktualisieren
P粉362071992
2023-08-26 15:24:30
<p>Ich möchte die gesamte Spalte <strong>email</strong> im Format Zeilenindex + email@gmail.com aktualisieren. </p>
<p>Dies sind die Daten in meiner Tabelle</p>
<table class="s-table">
<thead>
<tr>
<th>id</th>
<th>E-Mail</th>
</tr>
</thead>
<tbody>
<tr>
<td>12</td>
<td>abc@gmail.com</td>
</tr>
<tr>
<td>23</td>
<td>pqr@gmail.com</td>
</tr>
</tbody>
</table>
<p>Dies ist die Ausgabe, die ich möchte</p>
<table class="s-table">
<thead>
<tr>
<th>id</th>
<th>E-Mail</th>
</tr>
</thead>
<tbody>
<tr>
<td>12</td>
<td>1email@gmail.com</td>
</tr>
<tr>
<td>23</td>
<td>2email@gmail.com</td>
</tr>
</tbody>
</table>
<p>Ich habe die folgende Abfrage ausprobiert, aber nicht die erwartete Ausgabe erhalten. </p>
<pre class="brush:php;toolbar:false;">;mit C as
(
Wählen Sie email,row_number() over(order by id asc) als rowid aus
von cus
)
Update C
set email = rowid+'email@gmail.com'</pre>
<p>Das sind nicht nur 3 Zeilen, ich habe über 500 Zeilen in meiner <code>cus</code>-Tabelle. Es wäre besser, wenn mir jemand eine Lösung geben könnte, die keine Schleife erfordert. Bitte helfen Sie mir, eine SQL-Abfrage zu erstellen. Danke. </p>
这似乎有效,但我相信还有一种更优雅的解决方案,不需要使用join...
完整测试
也许这就是你想要做的:
将你想要更新的表(
cus
)与C
的cte
进行连接,然后进行相应的更新。这里有一个演示
@QisM对于
email
不唯一时的语法提出了疑虑,由于OP没有提到,我同意如果email
确实不唯一,这不是解决方案。因此,我对语法进行了轻微修改:现在
cte
带有id
,并且在JOIN C ON ..
条件中,我添加了匹配id
的检查。经过测试,如果电子邮件不唯一,这将修复该问题。