【问题标题】:MySQL update/concatenate column if NULL, using data from other columns如果为 NULL,MySQL 更新/连接列,使用来自其他列的数据
【发布时间】:2019-11-25 19:51:28
【问题描述】:

我有一个联系人表:

id   first_name   last_name   full_name
1    John         Doe         -null-
2    -null-       -null-      Mike Willson
3    Dany         Jean        -null-
4    Peter        -null-      -null-

如何合并 first_namelast_name 列以填充 full_name 列,其中 full_nameNULL

我想得到这样的结果:

id   first_name   last_name   full_name
1    John         Doe         John Doe 
2    -null-      -null-       Mike Willson
3    Dany         Jean        Dany Jean
4    Peter        -null-      Peter

【问题讨论】:

  • mike 来自哪里..?

标签: mysql sql


【解决方案1】:
UPDATE your_table
SET full_name = CONCAT_WS(' ', first_name, last_name)
WHERE full_name IS NULL
  AND COALESCE(first_name, last_name) IS NOT NULL

如果 full_name 为 NULL 并且 first_namelast_name 不为 NULL,将更新它。

请注意,CONCAT_WS() 将忽略 NULL 参数。因此,如果first_namelast_name 为NULL,您将只能获得没有' ' 空格的其他值。

db-fiddle.com上查看演示

【讨论】:

    【解决方案2】:

    一种选择是同时使用CONCAT()COALESCE()TRIM() 函数:

    UPDATE contacts_table
       SET full_name = TRIM(CONCAT( COALESCE(first_name,''), ' ', COALESCE(last_name,'') )) 
    

    没有WHERE 条件。

    Demo

    【讨论】:

      【解决方案3】:

      我正在这样做 - 效果很好:

      UPDATE `conacts_table`
      SET `full_name` = CONCAT(IFNULL(first_name, ''), ' ', IFNULL(last_name, ''))
      WHERE `full_name` IS NULL
      

      只是想知道这是否是最佳方法?

      【讨论】:

      • 这和几个 TRIM,如果连接的结果是空字符串,则为 NULLIF。
      猜你喜欢
      • 2021-09-19
      • 1970-01-01
      • 2014-10-01
      • 2020-08-04
      • 2022-08-18
      • 1970-01-01
      • 2021-06-03
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多