0

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

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

2 回答 2

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”表中分配 id,然后是“kn”表,并按两个表中的 id 顺序分配。

于 2016-05-10T10:37:02.893 回答
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 会有所不同。但无论如何,您都在更改 ID。

于 2016-05-10T11:45:15.727 回答