在Mysql中使用行索引和硬編碼值更新整個列的方法
P粉362071992
2023-08-26 15:24:30
<p>我想使用行索引 email@gmail.com的格式更新整個<strong>email</strong>列。 </p>
<p>這是我的表中的數據</p>
<table class="s-table">
<thead>
<tr>
<th>id</th>
<th>電子郵件</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>這是我想要的輸出</p>
<table class="s-table">
<thead>
<tr>
<th>id</th>
<th>電子郵件</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>我嘗試了下面的查詢,但沒有得到我期望的輸出。 </p>
<pre class="brush:php;toolbar:false;">;with C as
(
select email,row_number() over(order by id asc) as rowid
from cus
)
update C
set email = rowid 'email@gmail.com'</pre>
<p>這不只是3行,我的<code>cus</code>表格中有500多行。如果有人可以給我一個不需要循環的解決方案,那會更好。請幫我建立一個SQL查詢。謝謝。 </p>
這似乎有效,但我相信還有一個更優雅的解決方案,不需要使用join...
完整測試
也許這就是你想要做的:
將你想要更新的表(
cus
)與C
的cte
進行連接,然後進行對應的更新。這裡有一個示範
#@QisM對於
email
不唯一時的語法提出了疑慮,由於OP沒有提到,我同意如果email
確實不唯一,這不是解決方案。因此,我對語法進行了輕微修改:現在
cte
帶有id
,並且在JOIN C ON ..
條件中,我加入了符合id
的檢查。經過測試,如果電子郵件不唯一,這將修復該問題。