使用select和override nulls插入或更新

时间:2016-07-30 06:41:07

标签: sql sqlite upsert

我有两个表:默认用户具有相同列,默认 user_id 除外在"用户"中独一无二它没有。

我想从用户获取所有行,并将其插入默认值,如果用户中的两行具有相同的 user_id ,我希望以这样的方式合并它们,以便使用非空/空值覆盖所有空/空值

这是一个例子

users
-----
user_id|name|email|address
--------------------------
1      |abc |null |J St
1      |coco|a@b.c|null

插入默认值后,我期待下一个结果:

defaults
-----
user_id|name|email|address
--------------------------
1      |abc |a@b.c|J St

@Eric B 提供answer如何使用插入值执行此操作:

  

假设表中有3列.. ID,NAME,ROLE
  这将更新2   列。当ID = 1时,ROLE将不受影响。当ID = 1时   如果不存在,角色将被设置为“替补”。而不是   默认值。

INSERT OR REPLACE INTO Employee (id, name, role) 
  VALUES (  1, 
            'Susan Bar',
            COALESCE((SELECT role FROM Employee WHERE id = 1), 'Benchwarmer')
          );

当我使用select for my insert

时,如何执行此操作
insert or replace into defaults select ??? from users

1 个答案:

答案 0 :(得分:1)

INSERT OR REPLACE INT DEFAULTS VALUES (ID, Name, Role)
  (
    SELECT ID, MAX(Name), MAX(Role) FROM Users GROUP BY ID
  );

如果有最大值,则max将选择最大值而不是null。