mysql - SELECT AND INSERT QUERY into multiple table with conditions
mysql - SELECT AND INSERT QUERY into multiple table with conditions
我不知道在 MySQl 中是否可行,但我必须将旧数据库 table 导入新的规范化数据库 table。
我有 2 个 table 用户和新用户 user_roles,而前一个只有管理员
newdb.users Table
user_id | username | password
newdb.user_roles Table
user_id | role_id
旧数据库table
olddb.admin Table
id | username | password | user_type
1 | user1 | *** | admin
3 | user7 | *** | staff
admin role_id 是 1,staff role_id 是 2
所以 SQL 插入后的新 table 应该是这样的。
newdb.users Table
user_id | username | password
1 | user1 | ***
3 | user7 | ***
newdb.user_roles Table
user_id | role_id
1 | 1
3 | 2
如何使用 MYSQL 查询来做到这一点。
谢谢。
为了将角色从旧 table 插入到新 table:
INSERT INTO newdb.user_roles
SELECT
id,
CASE WHEN user_type='admin' THEN 1
WHEN user_type ='staff' THEN 2 END AS role_id
FROM olddb.admin
为了将用户从旧 table 插入到新 table:
INSERT INTO newdb.users
SELECT
id,
username,
password
FROM olddb.admin
您应该将此信息基于 roles
table:
create table roles (
int id auto_increment primary key,
role_name varchar(255)
);
insert into roles (role_name)
select distinct user_type
from old.admin;
然后:
insert into new.users(username, password)
select distinct username, password
from old.admin;
(如果username
在原来的table中没有重复,distinct
就不需要了。)
并且:
insert into user_roles(user_id, role_id)
select u.id, r.id
from new.users u join
old.admin a
on u.user_name = a.user_name and
u.password = a.password join -- this condition may not be necessary
new.roles r
on a.user_type = r.role_name;
虽然您可以将值硬编码到查询中,但我认为让数据库为您完成这项工作是个好主意。这种做法比较通用。
我不知道在 MySQl 中是否可行,但我必须将旧数据库 table 导入新的规范化数据库 table。 我有 2 个 table 用户和新用户 user_roles,而前一个只有管理员
newdb.users Table user_id | username | password newdb.user_roles Table user_id | role_id
旧数据库table
olddb.admin Table id | username | password | user_type 1 | user1 | *** | admin 3 | user7 | *** | staff
admin role_id 是 1,staff role_id 是 2
所以 SQL 插入后的新 table 应该是这样的。
newdb.users Table user_id | username | password 1 | user1 | *** 3 | user7 | *** newdb.user_roles Table user_id | role_id 1 | 1 3 | 2
如何使用 MYSQL 查询来做到这一点。 谢谢。
为了将角色从旧 table 插入到新 table:
INSERT INTO newdb.user_roles
SELECT
id,
CASE WHEN user_type='admin' THEN 1
WHEN user_type ='staff' THEN 2 END AS role_id
FROM olddb.admin
为了将用户从旧 table 插入到新 table:
INSERT INTO newdb.users
SELECT
id,
username,
password
FROM olddb.admin
您应该将此信息基于 roles
table:
create table roles (
int id auto_increment primary key,
role_name varchar(255)
);
insert into roles (role_name)
select distinct user_type
from old.admin;
然后:
insert into new.users(username, password)
select distinct username, password
from old.admin;
(如果username
在原来的table中没有重复,distinct
就不需要了。)
并且:
insert into user_roles(user_id, role_id)
select u.id, r.id
from new.users u join
old.admin a
on u.user_name = a.user_name and
u.password = a.password join -- this condition may not be necessary
new.roles r
on a.user_type = r.role_name;
虽然您可以将值硬编码到查询中,但我认为让数据库为您完成这项工作是个好主意。这种做法比较通用。