仅删除重复的1条记录(访问数据库)

时间:2013-05-20 22:41:32

标签: c# sql ms-access duplicates relational-database

我正在制作一个预订系统,但我现在卡住了。

Microsoft访问2010表:

-drinks
-ordered_drinks

结构

tables:
-id,
-..,
-...,

drinks:
-id,
-title,
-price,

ordered_drinks:
-id,
-drink_id,
-table_id,

并且我只想删除订购饮品表中的1个重复行,但如果我尝试仅从重复的饮料中删除1个饮料,它将使用相同的drink_id删除所有饮料

   public bool deleteDrink(int di)
    {
        bool removed= false;
        dbcom = new OleDbCommand("DELETE FROM ordered_drinks WHERE table_id=@tableId", dbcon);
        dbcom.Parameters.AddWithValue("@tableId",tableId);
        removed = (dbcom.ExecuteNonQuery() >=1)? true : false;
        return removed;//return boolean
    }

有没有人知道sql语句只能从重复项中删除1行?

我认为它正朝着这个方向发展:

delete * drinks_ordered其中drink_id in(select top(1)WHERE drink_id = @ drink_id AND table_id = @ tableId

1 个答案:

答案 0 :(得分:0)

我个人认为删除表的最佳方法是获取行值,删除所有行,然后插入一个。因为你使用Access可能是唯一的方法 - 那么,放一个该表上的主键,因此您不会再遇到此问题。使用SQL Server,您可以“设置ROWCOUNT 1”,之后所有操作只会影响一行,因此只有当where子句指向多行时才能有效删除一行 - 如果您有三次重复,则该方法存在问题,你将留下两行,并且必须一次又一次地运行语句,直到你只剩下一行。使用“存储值,删除全部,重新插入”方法,您可以保证在完成后只有一行。