MySQLで行インデックスとハードコードされた値を使用して列全体を更新する方法
P粉362071992
2023-08-26 15:24:30
<p><strong>email</strong> 列全体を行インデックス email@gmail.com で更新したいと考えています。 </p>
<p>これは私のテーブルのデータです</p>
<テーブルクラス="s-テーブル">
<頭>
<tr>
id |
<th>メール</th>
</tr>
</頭>
<みんな>
<tr>
12 |
<td>abc@gmail.com</td>
</tr>
<tr>
23 |
<td>pqr@gmail.com</td>
</tr>
</tbody>
</テーブル>
<p>これが私が望む出力です</p>
<テーブルクラス="s-テーブル">
<頭>
<tr>
id |
<th>メール</th>
</tr>
</頭>
<みんな>
<tr>
12 |
<td>1email@gmail.com</td>
</tr>
<tr>
23 |
<td>2email@gmail.com</td>
</tr>
</tbody>
</テーブル>
<p>以下のクエリを試しましたが、期待した出力が得られませんでした。 </p>
<pre class="brush:php;toolbar:false;">;C を使用
(
rowid として email,row_number() over(ID 昇順で並べ替え) を選択します
カスから
)
アップデートC
set email = rowid 'email@gmail.com'</pre>
<p>これは単なる 3 行ではなく、<code>cus</code> テーブルには 500 行以上あります。ループを必要としない解決策を誰かが教えてくれれば良いのですが。 SQL クエリの作成を手伝ってください。ありがとう。 </p>
これは機能するようですが、結合を使用する必要のない、より洗練されたソリューションがあると思います...
リーリー ###総テスト### リーリーおそらくこれがあなたがやりたいことです:
リーリー更新するテーブル (
cus
) をC
のcte
に接続し、それに応じて更新します。こちらがデモです
@QisM は、
リーリーemail
が一意でない場合の構文に関する懸念を提起しましたが、OP では言及されていないため、email
が実際に一意でない場合、これは次のとおりであることに同意します。解決策ではありません。そこで、構文を少し変更しました:Now
cte
をid
に設定し、JOIN C ON ..
条件にid
と一致するチェックを追加しました。テスト後、メールが一意でない場合、 これにより問題が解決されます。