2016-09-10 2 views
0

Ich versuche, die Varchar-Werte einer Spalte in den ID-Fremdschlüsselwert aus einer anderen Tabelle zu ändern, und ich kann nicht scheinen, die Konvertierung zu machen, wirft immer einen Fehler.Varchar-Spalte in Fremdschlüssel einer anderen Tabelle ändern SQL

Benutzertabelle ...

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 

...

Rolename Tisch ...

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

Nun, was ich tun muß, ist die Rolename Spalte in dem Benutzer Tabelle zeigt auf den Schlüssel in der RoleName-Tabelle. Ich versuche das immer, aber gibt mir immer einen Fehler.

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

Ich bin nicht sicher, ob ich entweder den Fremdschlüssel richtig mit diesem Code Einrichten bin ...

+0

Es war Mock-Daten für eine Inclass-Übung, ich habe nicht die Datenbank geschrieben, nur die Nachschlagetabelle, aber danke für die Köpfe hoch! – remedy

Antwort

1

Nein, Sie sind diese falsch zu machen. Sie setzen die id in die User Tabelle. Um dies zu beheben:

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

dann die Werte füllen:

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

Und loszuwerden der alten Spalte!

+0

Tabelle ändern Benutzer hinzufügen Einschränkung fk_user_RoleId Fremdschlüssel (RoleId); Ich bekomme immer noch einen Fehler von dieser Zeile – remedy

+0

@Remedy. . . Ich hatte das falsche Keyword drin. –

+0

Um diese Antwort zu verbessern, sorry. Ich habe es funktioniert, Danke @Gordon Linoff – remedy

Verwandte Themen