MySQL 联合更新:更新相同 a 字段的两条记录的 c 字段

假设有一个表名为 table_name,包含三个字段 abc,且 a 字段相等的记录最多只有两条。现在要将 a 字段相同的两条记录中,b=1 的记录的 c 字段内容更新到 b=2 的记录的 c 字段。

可以使用以下 SQL 语句实现:

UPDATE table_name t1
JOIN table_name t2 ON t1.a = t2.a AND t1.b = 1 AND t2.b = 2
SET t2.c = t1.c;

解释:

  • UPDATE table_name t1:更新 table_name 表,并使用别名 t1
  • JOIN table_name t2 ON t1.a = t2.a AND t1.b = 1 AND t2.b = 2:将 table_name 表与自身进行自连接,使用别名 t2,并根据以下条件进行匹配:
    • t1.a = t2.a:两条记录的 a 字段相同。
    • t1.b = 1t1 记录的 b 字段值为 1
    • t2.b = 2t2 记录的 b 字段值为 2
  • SET t2.c = t1.c:将 t1 记录的 c 字段值更新到 t2 记录的 c 字段。

注意:

  • 该语句假设 a 字段相等的记录最多只有两条。如果存在超过两条 a 字段相同的记录,则需要调整条件语句。
  • 该语句会将 b=1 的记录的 c 字段值更新到所有 b=2 的记录中,如果 b=2 的记录存在多个,请确保更新的内容是期望的。
  • 建议在执行更新语句之前先进行备份,以防意外数据丢失。

示例:

假设 table_name 表包含以下数据:

| a | b | c | |---|---|---| | 1 | 1 | 'value1' | | 1 | 2 | 'value2' | | 2 | 1 | 'value3' | | 2 | 2 | 'value4' |

执行上述 SQL 语句后,table_name 表将变为:

| a | b | c | |---|---|---| | 1 | 1 | 'value1' | | 1 | 2 | 'value1' | | 2 | 1 | 'value3' | | 2 | 2 | 'value3' |

可以看到,a=1 的两条记录中,b=2 的记录的 c 字段值被更新为 b=1 的记录的 c 字段值。

MySQL 联合更新:更新相同 a 字段的两条记录的 c 字段

原文地址: https://www.cveoy.top/t/topic/oDp7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录