我有两个表:默认表和具有相同列的用户,除了默认情况下,user_id列是唯一的,而在“ users”中则不是。
我想从用户那里获取所有行并将其插入默认值,如果用户中的两行都具有相同的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时,角色将不受影响。当ID = 1时
不存在,该角色将设置为“ Benchwarmer”,而不是
默认值。
INSERT OR REPLACE INTO Employee (id, name, role)
VALUES ( 1,
'Susan Bar',
COALESCE((SELECT role FROM Employee WHERE id = 1), 'Benchwarmer')
);
当我将select用于插入时如何执行此操作
insert or replace into defaults select ??? from users
最佳答案
INSERT OR REPLACE INT DEFAULTS VALUES (ID, Name, Role)
(
SELECT ID, MAX(Name), MAX(Role) FROM Users GROUP BY ID
);
最大值将选择最大值,而不是null(如果有)。
关于sql - 使用选择和覆盖空值插入或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671127/