合并两个表而不重复



我需要将两个用户表合并为一个没有重复的表。

例如:在我的数据库中,我有表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

这里有一个可以执行您想要的查询:

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"表分配ID,然后从"kn"表分配,然后按两个表中的ID顺序分配。

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会有所不同。但你还是在更改身份证。

相关内容

  • 没有找到相关文章

最新更新