我需要将两个用户表合并为一个没有重复的用户表。
例如:在我的数据库中,我有表en_user和kn_user,并且两者中都存在少量用户,所以当我运行查询以将kn_user与en_user合并时,kn_user中存在的唯一用户应该被复制到用户所在的en_user两者都不应该合并。
为了更好地理解我的表格
en_users表
**id name**
1 Rakesh
2 Deepu
3 sudha
4 sandeep
5 Anil
kn_user表
**id name**
1 Ashwini
2 Rakesh
3 sudha
4 sunil
5 Anil
所以当合并kn_users和en_users时需要输出
en_users表
**id name**
1 Rakesh
2 Deepu
3 sudha
4 sandeep
5 Anil
6 Ashwini
7 Sunil
答案 0 :(得分:0)
这是一个执行您想要的查询:
select (@rn := @rn + 1) as id, name
from ((select id, name, 1 as priority
from en_users
) union all
(select id, name, 2
from kn_users k
where not exists (select 1 from en_users e where e.name = k.name)
)
) ek cross join
(select @rn := 0) params
order by priority, id;
子查询中的逻辑是从一个表中获取所有内容,然后仅从第二个表中获取不匹配的行。该示例基于name
。
查询小心根据问题中的示例分配最终id
- 首先从“en”表然后“kn”表中分配id,并按照两个表中的id顺序分配id
答案 1 :(得分:0)
Set @ID = 0
Select @ID:=@ID+1 AS ID,t1.Name
from (Select name from en_users
union
Select name from kn_users) as t1
ORDER BY t1.Name
ID会有所不同。但无论如何,你正在改变身份证。