【问题标题】:Deleting from a database map从数据库映射中删除
【发布时间】:2008-11-06 20:35:20
【问题描述】:

我有这 3 个表 + 数据:

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

类别:catId、catName
数据:1、我的猫一只。 2、我的猫二

地图:mapId、itemId、catId

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

【问题讨论】:

    标签: sql database


    【解决方案1】:

    假设您已经获得“my cat 2”的类别 ID 和“my item 1”的项目 ID:

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

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

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

    【讨论】:

      【解决方案2】:

      如果您决定一个项目应该只属于新类别,那么以下应该可行:

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

      【讨论】:

        猜你喜欢
        • 2018-07-08
        • 1970-01-01
        • 2019-09-06
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 2019-09-15
        • 1970-01-01
        • 2011-11-05
        相关资源
        最近更新 更多