合并两个表而不复制

Merging two tables without duplicating

我需要将两个用户 table 合并为一个不重复的用户。

例如:在我的数据库中我有 tables en_user 和 kn_user 并且两者都存在很少的用户所以当我 运行 查询到将 kn_user 与 en_user 合并,然后应将 kn_user 中存在的唯一用户复制到 en_user,而两者中存在的用户不应合并。

为了更好地理解我的 table 是

en_users table

**id    name** 
1     Rakesh
2     Deepu
3     sudha
4     sandeep
5     Anil

kn_user table

**id    name** 
1     Ashwini
2     Rakesh
3     sudha
4     sunil
5     Anil     

所以当 kn_users 与 en_users 合并时需要这个输出

en_users table

**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;

子查询中的逻辑是从一个 table 中获取所有内容,然后仅从第二个 table 中获取不匹配的行。该示例基于 name.

查询根据问题中的示例仔细分配最终的 id——首先从 "en" table 分配 ID,然后 "kn" table,并在两个table中按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 会有所不同。但是无论如何您都在更改ID。