首页 > 解决方案 > 如何根据不同的表在表中插入行?

问题描述

我有两张桌子。一张user表包含 user_id、user_email、user_name
,另一user_status张表包含 user_email、status。
我面临的问题是user_status表是新添加的,它是空的。该user表已经在生产中。我想实现一个场景,我可以在status不清理数据库的情况下在表中添加行。

如果user_name为空,则表中status的为else 。user_statusofflineonline

user_id    user_email    user_name   
1          xyz@gmail.com   xyz       
2          abc@gmail.com             

如果这是我的user表并且我的user_status表是空的,那么我想将user_status表更新为:

user_email         status    
xyz@gmail.com      active    
abc@gmail.com      inactive  

标签: sqldatabasecasesql-insert

解决方案


使用insert ...select和条件表达式:

insert into user_status(user_email, status)
select user_email, case when user_name is null then 'offline' else 'online' end
from users

这假设您所说的“空”是指null. 如果您真的是指空字符串,则case应该where user_name = ''改为使用中的条件。

请注意,这user是几乎所有数据库中的语言关键字,因此不是列名的好选择。我在查询中将其重命名为users


推荐阅读