2011-04-18 4 views
0

J'ai trois tables.Modifier la table avec la clé étrangère

Person (id, FirstName, LastName, BirthDate) 
Contact (id, contact, type) 
PersonContact(Person_id, Contact_id) 

Comme vous pouvez voir que person_id est comming de la table Personne dans le tableau PersonContact Et contact_id est comming de table Contact dans le tableau PersonContact

Je veux écrire une requête qui devrait relier la colonne person_id du tableau PersonContact avec la colonne id de Person Table en tant que clé étrangère.

Et colonne contact_id de PersonContact avec colonne id de la table de contact comme clé étrangère

+0

Juste pour clarifier, vous souhaitez ajouter des contraintes de clé étrangère à PersonContact droite? Vous ne pouvez donc pas ajouter d'enregistrement à PersonContact à moins que les enregistrements référencés existent dans Personne et Contact? – Kendrick

+0

@Kendrick: Oui vous avez raison .. – Awan

Répondre

3

Cela devrait répondre au problème

CREATE TABLE IF NOT EXISTS `person_contact` (
    `contact_id` int(11) NOT NULL, 
    `person_id` int(11) NOT NULL, 
    PRIMARY KEY (`contact_id`,`person_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


ALTER TABLE `person_contact` 
    ADD CONSTRAINT `person_contact_ibfk_2` FOREIGN KEY (`person_id`) REFERENCES `person` (`id`), 
    ADD CONSTRAINT `person_contact_ibfk_1` FOREIGN KEY (`contact_id`) REFERENCES `contact` (`id`); 
+1

Il me donne erreur suivante: '# 1005 - Impossible de créer une table 'chdp. # Sql-305_45' (errno: 150) (Details...)' – Awan

+0

Afin d'avoir un relationnel moteur (clés étrangères et contraintes d'intégrité), votre moteur mysql doit avoir activé le moteur innodb. Et les tables que vous créez doivent utiliser ce moteur (par défaut, mysql utilise le moteur myisam qui n'est pas relationnel). CREATE TABLE SINON EXISTE person_contact ( contact_id int (11) NOT NULL, person_id int (11) NOT NULL, clé primaire (contact_id, person_id) ) MOTEUR = InnoDB DEFAULT CHARSET = latin1; ' Spécifiez' MOTEUR = InnoDB' comme ci-dessus pour chaque table –

0

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

alter PersonContact add foreign key(PersonID) references Person(ID) 

Pour sélectionner, vous:

select * 
    from Person 
     inner join PersonContact on(Person.ID=PersonContact.PersonID) 
+0

Quelqu'un peut-il confirmer si cela fonctionne? Quand je l'essaye, il se plaint que 'Key column 'PersonID' n'existe pas dans la table' – puk

+0

Existe-t-il dans la table? Dans le cas ci-dessus, ses colonnes ont été nommées différemment, ce qui peut entraîner de la confusion. En outre, vous devez activer le moteur innodb et l'appliquer à la table. Je suis enclin à prendre le message d'erreur à sa valeur nominale si. Si vous rencontrez toujours un problème après avoir vérifié, postez une nouvelle question avec votre scénario spécifique. – Kendrick

0

Voici mon 0,02 $ de conseiller en termes de T-SQL

Sélectionnez FirstName, LastName, date de naissance de personne p joindre pc PersonContact ON p.id = pc.Person_id

Sélectionner un contact, le type De Contact c rejoindre PersonContact pc ON c.id = pc.Person_id

Questions connexes