簡體   English   中英

mysql-在有條件的情況下選擇並插入查詢到多個表中

[英]mysql - SELECT AND INSERT QUERY into multiple table with conditions

我不知道在MySQl中是否可能,但是我必須將舊數據庫表導入到新的規范化數據庫表中。 我在新表中有2個表user和user_roles,而前一個表只有admin

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查詢。 謝謝。

您應該將這些信息基於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;

(如果在原始表中不重復username則不需要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;

盡管您可以將值硬編碼到查詢中,但我認為讓數據庫為您完成工作是個好主意。 這種方法更為通用。

為了將角色從舊表插入新表:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM