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