2012-06-06 2 views
1

J'ai 2 tables:SQL 'join' 2 clés primaires à 1

PrimKey 
001 
002 

Et:

ID | ForeignKey 
a | 001 
b | 002 
c | 002 

Je veux supprimer, disons, la ligne 002 et 'lier' tous les 002 étrangers clés de 001, donc il ressemblera:

PrimKey 
001 

Et:

ID | ForeignKey 
a | 001 
b | 001 
c | 001 

Les contraintes FK ne me permettent pas de faire UPDATE + DELETE. Une astuce où creuser?

+2

Avez-vous essayé de procéder à la mise à jour, puis à la suppression en deux étapes distinctes? –

+0

@Hans, vous avez raison, je n'ai pas. Et ça devrait aider, je pense. –

Répondre

3

Vous devez le faire dans l'autre sens. Changez les lignes dans la deuxième table pour pointer vers un PK différent dans la première table; alors, quand il n'y a pas de références à row002, vous pouvez le supprimer.

+0

Je n'y ai pas pensé, merci! –

0

Aussi vous pouvez essayer de faire begin transaction, update, delete et commit.

0

Si vous n'avez aucun contrôle sur le schéma de base de données, vous devez le supprimer manuellement comme indiqué par Jeremy.

Si vous avez le contrôle, vous pouvez ajouter une relation de clé étrangère entre les tables et ajouter une contrainte de "suppression en cascade" dans les détails de la relation. Vous faites cela en allant à la conception de la table de la table avec des clés étrangères et en cliquant avec le bouton droit de la souris pour choisir "Relations". Ensuite, vous choisissez "Ajouter" et allez à la section pour définir la table et les colonnes. Cliquez sur le bouton avec les trois points et vous serez en mesure de choisir la table parent pour la relation, puis vous pouvez sélectionner les colonnes pour créer la relation. Enfin, dans l'écran des relations, vous trouverez la section de spécification d'insertion/mise à jour pour indiquer "cascade" lors de la suppression. (Il existe également une instruction alter table pour cela, mais il est parfois plus rapide d'utiliser l'interface graphique.)

+0

Je pense qu'il ne veut pas mettre en cascade la suppression. Il veut, faute d'un meilleur terme, les "fusionner". –

+0

assez sûr - je l'ai mal compris. Merci pour la clarification. – user158017

Questions connexes