【问题标题】:How to change default Null value after joining two tables?加入两个表后如何更改默认 Null 值?
【发布时间】:2020-03-02 10:13:22
【问题描述】:

在 MySQL 工作台中,我想左连接两个表,如下例:

table_a:
---------------------------------------
employee_number   name    e_mail
---------------------------------------
1                 Tom     tom@mail.com
2                 Ali     ali@mail.com
3                 Anna    anna@mail.com
4                 Clay    clay@mail.com
---------------------------------------

table_b:
--------------------------
employee_number   phone
2                 45678964
3                 79845275
--------------------------

我创建了一个新表 table_c 并加入这两个表:

#create table_c:
CREATE TABLE table_c (
  employye_number VARCHAR(255) NOT NULL,
  name VARCHAR(255) DEFAULT '',
  e_mail VARCHAR(255) DEFAULT '',
  phone VARCHAR(255) DEFAULT ''
);

#perform join of the two tables:
INSERT INTO table_c
SELECT *
FROM table_a
LEFT JOIN table_b USING (employee_number);

所需的输出如下。使用空字符串 ('') 作为空值,而不是 NULL

table_c:
----------------------------------------------------
employee_number   name    e_mail          phone
----------------------------------------------------
1                 Tom     tom@mail.com
2                 Ali     ali@mail.com    45678964
3                 Anna    anna@mail.com   79845275
4                 Clay    clay@mail.com
---------------------------------------------------

但是,当我在 MySQL 中执行此操作时,员工 1 和 4 的电话值仍然是 NULL

我不想只使用COALESE() 更改查询中的输出值,我希望将值作为'' 存储在表中,而不是NULL

有谁知道如何在table_c 中将NULL 值更改为''

【问题讨论】:

    标签: mysql sql left-join mysql-workbench sql-insert


    【解决方案1】:

    考虑:

    INSERT INTO table_c(employee_number, name, email, phone)
    SELECT 
        a.employee_number,
        a.name,
        a.email,
        COALESCE(b.phone, '')
    FROM table_a a
    LEFT JOIN table_b b USING (employee_number);
    

    注意事项:

    • COALESCE()null 值转换为作为第二个参数给出的值(此处,您需要空字符串)

    • 你应该真的枚举你想要select而不是使用select *的列

    • 我还建议明确列出 insert 的列

    【讨论】:

      【解决方案2】:

      使用COALESCE()

      COALESCE(phone, '')
      

      注意:使用INSERT INTO时,始终限定所有列名

      INSERT INTO table_c (employee_number, name, email, phone)
         SELECT a.employee_number, a.name, a.email, COALESCE(b.phone, '') AS phone
         FROM table_a a LEFT JOIN 
              table_b b 
              USING (employee_number);
      

      【讨论】:

      • 我想更新整个表,而不仅仅是在查询中将 Null 值输出为 '',所以很遗憾,这不起作用。
      猜你喜欢
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      相关资源
      最近更新 更多