2016-09-10 15 views
0

カラムのvarchar値を別のテーブルのid外部キー値に変更しようとしていますが、変換できないようで常にエラーがスローされます。私は何をする必要があるかvarcharカラムを別のテーブルの外部キーに変更するSQL

Userテーブル...

CREATE TABLE User(
UserId INT NOT NULL AUTO_INCREMENT, 
FirstName VARCHAR(50), 
LastName VARCHAR(50), 
Email VARCHAR(50), 
Username VARCHAR(20) NOT NULL, 
Password VARCHAR(50) NOT NULL, 
RoleName VARCHAR(50) NOT NULL, 
LastLogin DATETIME, 

PRIMARY KEY(UserId) 
); 

INSERT INTO User 
(FirstName, LastName, Email, Username, Password, RoleName) 
VALUES 

...

ロール名テーブル...今

create table rolename(
       RoleId int not null auto_increment, 
       RoleName varchar(50), 
       primary key(RoleId) 
); 
insert into rolename(RoleName) select distinct RoleName from user; 

は、ユーザーでのロール名の列を持っていますテーブルはRoleNameテーブルのキーを指します。私はこれを試し続けますが、いつも私にエラーを与えます。私はどちらかそのコードを適切に外部キーを設定していた場合、私はわからない

update user set user.`RoleName` = rolename.`RoleId` from user inner join rolename on user.`RoleName` = rolename.`RoleName`; 

...

+0

私はデータベースを書いていませんでしたが、データベースは書いていませんでしたが、ヘッドアップに感謝しています! – remedy

答えて

1

いいえ、あなたはこの間違ったをやっています。 idUserテーブルに配置します。

alter table user add roleid int; 
alter table user add constraint fk_user_roleid foreign key (roleid) references rolename(roleid); 

が続いて値を移入:

update user u join 
     rolename r 
     on r.rolename = u.rolename 
    set u.roleid = r.roleid; 

を、古い列を取り除くこれを修正するには!

alter table user drop column rolename; 
+0

alter tableユーザー制約を追加するfk_user_RoleId外部キー(RoleId)。私はまだその行からエラーが発生しています – remedy

+0

@remedy。 。 。私はそこに間違ったキーワードを持っていた。 –

+0

この回答を以前にアップアップすることを意味します、申し訳ありません。私はそれを働かせた、ありがとう@ゴードンLinoff – remedy

関連する問題