从数据库映射中删除

时间:2008-11-06 20:35:20

标签: sql database

我有这3个表+数据:

项目:itemId,itemName
数据:1,我的第一项

类别:catId,catName
数据:1,我的猫一个。 2,我的猫两个

地图:mapId,itemId,catId

当您在“我的猫一”类别中包含“我的第一项”项时,您将[1,1,1]插入地图中。当您将“my item one”添加到“my cat two”时,将[2,1,2]插入地图中。现在让我们说改变主意,只想要“我的猫二”中的项目。这意味着我们需要知道项目不再属于哪些类别,并从地图中删除关联。这样做的最有效步骤是什么? (我正在寻找一种能够超越这个微不足道的例子的解决方案。)

2 个答案:

答案 0 :(得分:3)

假设您已经获得了“我的猫咪2”的类别ID和“我的项目1”的项目ID:

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

如果您有一组要保留该项目的类别,您可以:

  1. 从地图中删除该项目的所有内容,然后重新添加设置
  2. 使用上述查询,但使用“AND CatID NOT IN [...]”

答案 1 :(得分:0)

如果您确定某个项目只能在新类别中,则以下内容应该有效:

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