2008-11-06 6 views
0

Je ces 3 tableaux + données:Suppression d'une carte de base de données

articles: itemId, itemName
données: 1, mon article un

catégories: catId, catName
données : 1, mon chat un. 2, mon chat deux

carte: mapId, itemId, catId

Lorsque vous ajoutez un objet "mon article un" dans la catégorie "mon seul chat", vous insérez [1, 1, 1] dans la carte. Lorsque vous ajoutez "mon article un" à "mon chat deux", vous insérez [2, 1, 2] dans la carte. Maintenant, disons que nous changeons d'avis et que nous voulons seulement l'article dans "mon chat deux". Cela signifie que nous devons savoir dans quelles catégories l'objet n'est plus présent et supprimer les associations de la carte. Quelle est la séquence de mesures la plus efficace à prendre pour le faire? (Je suis à la recherche d'une solution qui évoluera au-delà de cet exemple trivial.)

Répondre

3

En supposant que vous avez déjà l'ID de catégorie pour « mon chat deux » et l'ID d'article pour « mon article 1 »:

DELETE FROM MAP WHERE ItemID = @MyItem1Id 
       AND CatID <> @MyCat2Id 

Si vous avez un ensemble de catégories que vous voulez garder l'élément, vous pouvez soit:

  1. Supprimer tout de la carte pour cet élément et puis ajoutez l'ensemble
  2. Utilisez une requête comme ci-dessus mais avec "ET CatID pas dans [...]"
0

Si vous décidez qu'un élément ne devrait être dans la nouvelle catégorie, ce qui suit devrait fonctionner:

DELETE 
    M 
FROM 
    Map M 
WHERE 
    M.itemid = @item_id AND 
    M.catid <> @new_cat_id 
Questions connexes