0

私は予約システムを作っていますが、今は立ち往生しています。

Microsoft access 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
    }

重複から1行だけを削除するSQLステートメントを知っている人はいますか?

私はそれがこの方向のどこかにあると思います:

delete * Drinks_ordered where drink_id in (select top(1) WHERE drink_id=@drink_id AND table_id=@tableId

4

1 に答える 1

0

個人的には、テーブルの重複を排除する最善の方法は、行の値を取得し、すべての行を削除して、1 つ戻すことだと思います。Access を使用しているので、おそらくそれが唯一の方法です。次に、主キーを配置します。再び問題が発生しないようにします。SQL Serverでは、「SET ROWCOUNT 1」を使用すると、その後のすべての操作が1行にのみ影響するため、where句が多くの行を指している場合、1行のみを効果的に削除できます-その方法の問題は、トリプリケートがある場合です、2行が残り、1行だけになるまでステートメントを何度も実行する必要があります。「値を保存し、すべて削除し、再挿入する」方法を使用すると、完了時に行が 1 つだけになることが保証されます。

于 2013-05-20T22:59:21.483 に答える