合并两个表而不复制
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。
我需要将两个用户 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。