C# 仅从复制的(access数据库)中删除1条记录

C# 仅从复制的(access数据库)中删除1条记录,c#,sql,ms-access,duplicates,relational-database,C#,Sql,Ms Access,Duplicates,Relational Database,我在预约,但我现在卡住了 Microsoft acces 2010表格: -drinks -ordered_drinks 结构 tables: -id, -.., -..., drinks: -id, -title, -price, ordered_drinks: -id, -drink_id, -table_id, 我只想删除ordered drinks表中重复的行中的1行,但如果我尝试仅从重复行中删除1个饮料,它将删除具有相同饮料id的所有饮料 public bool dele

我在预约,但我现在卡住了

Microsoft acces 2010表格:

-drinks
-ordered_drinks
结构

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

drinks:
-id,
-title,
-price,

ordered_drinks:
-id,
-drink_id,
-table_id,
我只想删除ordered drinks表中重复的行中的1行,但如果我尝试仅从重复行中删除1个饮料,它将删除具有相同饮料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行吗

我认为这是一个方向:


删除*drinks\u ordered where drink\u id in select top1 where drink\u id=@drink\u id AND table\u id=@tableId

我个人认为消除表格重复的最佳方法是获取行值,删除所有行,然后将其中一行插入。因为您使用的是Access,所以这可能是唯一的方法—然后,在该表上放置一个主键,这样您就不会再次遇到问题。使用SQL Server,您可以设置ROWCOUNT 1,然后设置之后的所有操作将只影响一行,因此当where子句指向多行时,您可以有效地仅删除一行-该方法的问题是如果有三行,您将只剩下两行,并且必须反复运行该语句,直到只剩下一行。使用storevalues、deleteall、reinsert方法,可以保证在完成时只有一行。

复制的是什么?整排;包括身份证、酒水身份证和餐桌身份证;或者仅仅是table_id?看起来您的SQL语句正在从table_id等于tableId字段中的值的表中删除所有已订购的饮料。应该类似于从订购的饮料中删除,其中table_id=@tableId和drink_id=@dii已经尝试过,但问题将保持不变,因为我的饮料id中有重复项,我只想从具有相同饮料id的所有饮料中删除1个饮料。与可能出现的重复行相比,ROWCOUNT解决方案更违反合理的关系原则。不,在这种方法中,您不会重复任何操作。保存列值,删除所有行,重新插入。只要做一次。使用rowcount=1方法,您必须对每一个“额外”行重复该方法。如果您尝试了以下操作:将rowcount 1从饮料中删除,其中饮料id=@drink\u id和表格id=@tableId,但它仍然不起作用,感谢您的帮助Access没有该功能。很抱歉让人困惑。我之所以提到这个方法,是因为它是一种在功能更全面的数据库中删除重复项的流行方法。您必须执行重新插入方法。小心点,先做个备份。你只需要做一次,所以用手来做是可以的-你要放一个主键来防止这种情况再次发生。