首页 > 社区问答列表 >更新行时使用联接在更新查询中而不是列

  更新行时使用联接在更新查询中而不是列

更新之前(原始示例表):

document_id meta_key meta_value
1 iban IBAN123456
1 bankaccount ACCT987654
2 iban IBAN555555
2 bankaccount ACCT444444
3 iban IBAN888888
3 bankaccount ACCT333333

运行SQL更新查询后:

document_id meta_key meta_value
1 iban IBAN123456
1 bankaccount IBAN123456
2 iban IBAN555555
2 bankaccount IBAN555555
3 iban IBAN888888
3 bankaccount IBAN888888

我需要一个查询来实现上述表格的结果吗?

P粉170438285
P粉170438285

  • P粉826283529
  • P粉826283529   采纳为最佳   2023-08-03 11:24:36 1楼

    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。

    在运行任何更新查询之前,请记得备份您的数据库,并在安全环境中进行测试!


    +0 添加回复