更新行時使用聯結在更新查詢中而不是列
P粉170438285
P粉170438285 2023-08-02 12:32:01
0
1
520
<p>更新之前(原始示例表):</p> <table class="s-table"> <thead> <tr> <th>document_id</th> <th>meta_key</th> <th>meta_value</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>iban</td> <td>IBAN123456</td> </tr> <tr> <td>1</td> <td>bankaccount</td> <td>ACCT987654</td> </tr> <tr> <td>2</td> <td>iban</td> <td>IBAN555555</td> </tr> <tr> <td>2</td> <td>bankaccount</td> <td>ACCT444444</td> </tr> <tr> <td>3</td> <td>iban</td> <td>IBAN888888</td> </tr> <tr> <td>3</td> <td>bankaccount</td> <td>ACCT333333</td> </tr> </tbody> </table> <p>运行SQL更新查询后:</p> <table class="s-table"> <thead> <tr> <th>document_id</th> <th>meta_key</th> <th>meta_value</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>iban</td> <td>IBAN123456</td> </tr> <tr> <td>1</td> <td>bankaccount</td> <td>IBAN123456</td> </tr> <tr> <td>2</td> <td>iban</td> <td>IBAN555555</td> </tr> <tr> <td>2</td> <td>bankaccount</td> <td>IBAN555555</td> </tr> <tr> <td>3</td> <td>iban</td> <td>IBAN888888</td> </tr> <tr> <td>3</td> <td>bankaccount</td> <td>IBAN888888</td> </tr> </tbody> </table> <p>我需要一个查询来实现上述表格的结果吗?</p>
P粉170438285
P粉170438285

全部回覆(1)
P粉826283529

document_id, meta_key, and meta_value. 您想要更新meta_key為bankaccount的行的meta_value,將其更新為meta_key為iban的行中相應的meta_value。

以下是一個實現這個目標的SQL查詢:


UPDATE example_table AS p1
INNER JOIN (
    SELECT document_id, meta_value AS iban
    FROM example_table
    WHERE meta_key = 'iban'
) AS p2 ON p1.document_id = p2.document_id
SET p1.meta_value = p2.iban
WHERE p1.meta_key = 'bankaccount';

  1. p1表是example_table的別名,p2是子查詢的別名
  2. 子查詢選擇meta_key為'iban'時的document_id和meta_value
  3. #主查詢使用INNER JOIN來符合p1和子查詢p2之間的document_id。
  4. 然後,它會將p1中meta_key為'bankaccount'的meta_value更新為p2中的iban。

在執行任何更新查詢之前,請記得備份您的資料庫,並在安全性環境中進行測試!


熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!