2016-08-06 45 views
1

我不知道它是可能的或不在MySQl,但我必須將舊的數據庫表導入新的規範化數據庫表。 我有2個表的用戶,並在新的user_roles和前一個只有具有管理員mysql - 選擇並插入查詢條件多表

 
newdb.users Table 
user_id | username | password 

newdb.user_roles Table 
user_id | role_id 

舊的數據庫表

 
olddb.admin Table 
id | username | password | user_type 
1 | user1 | ***  | admin 
3 | user7 | ***  | staff 

管理ROLE_ID爲1和工作人員ROLE_ID是2

所以SQL插入後的新表應該看起來像。

 
newdb.users Table 
user_id | username | password 
1  | user1 | *** 
3  | user7 | *** 

newdb.user_roles Table 
user_id | role_id 
1  | 1 
3  | 2 

如何使用MYSQL查詢來做到這一點。 謝謝。

回答

2

你應該立足這個信息在roles表上:

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; 

distinct是沒有必要的,如果username沒有在原來的表重複。)

和:

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; 

雖然可以硬編碼值到查詢,我認爲讓數據庫爲你做好工作是一個好主意。這種方法更一般。

+0

感謝@戈登,它工作完美,只是爲了讓事情變得簡單,我沒有提到角色表我也有過。 只有一件事你錯過輸入用戶名爲user_name。無論如何非常感謝你。 –

0

爲了插入從舊錶的作用,以新表:

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 

爲了從舊錶到新表中插入用戶:

INSERT INTO newdb.users 
SELECT 
id, 
username, 
password 
FROM olddb.admin