0

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

Microsoft 访问 2010 表:

-drinks
-ordered_drinks

结构体

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

drinks:
-id,
-title,
-price,

ordered_drinks:
-id,
-drink_id,
-table_id,

我只想删除订购饮料表中的 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_ordered where drink_id in (select top(1) WHERE drink_id=@drink_id AND table_id=@tableId

4

1 回答 1

0

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

于 2013-05-20T22:59:21.483 回答