使用连接更新表,如果不存在则为 NULL

Posted

技术标签:

【中文标题】使用连接更新表,如果不存在则为 NULL【英文标题】:Update table with join and if does not exists then NULL 【发布时间】:2016-11-21 15:25:45 【问题描述】:

我有一个包含 pid_name 列 varchar(40) 的主表,我想用另一个表进程的 pname 更新该 pid_name 列。 Processes 表有 2 列 pid 和 pname,有 100 个不同的行。 主表中的 pid 具有超过 50K 个不同的 pid_name 值。我想用进程表中的所有值和进程表中不存在的 NULL 更新 pid_name。我正在使用 Redshift 数据库。提前致谢示例数据

更新前的主表ID Pid_name1 abc2 def3 ghi 处理表pid pnameabc Process_1def Process_2 更新后主表中的预期输出ID Pid_name1 Process_12 Process_23 NULL(因为它在进程表中不存在)

【问题讨论】:

【参考方案1】:
UPDATE master
SET pid_name =
    (SELECT pname
     FROM processes p
     WHERE p.pid = master.pid_name);

【讨论】:

感谢您回答劳伦斯!但是,如果进程表中不存在 pid,这不会将我的 pid_name 更新为 null。 完美!非常感谢

以上是关于使用连接更新表,如果不存在则为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 选择过去 7 天(周)的数据,如果不存在,则为空/零

sqlite中数据存在更新,数据不存在添加的语句怎么写

索引视图中完全外连接的替代方案

如果右侧表中不存在日期,则使用 LEFT JOIN 返回 NULL

Laravel 模型 - 如果数据库表不存在则返回 null

如果不存在记录,让表值函数返回 NULL