1

サンプルデータがあります

ID DAY ORDER TIME PRODUCT
 1   1    1    1     1 
 2   1    1    1     2
 3   1    1    1     3
 4   1    2    2     1
 5   1    2    2     2
 6   1    2    2     3
 7   1    2    *3*   1
 8   1    2    *3*   2
 9   1    2    *3*   3

同日、時間帯をずらして複数の注文が入るのを防ぎたい。DAY、ORDER、TIMEに一意のインデックスを設定すると、とにかく複数の時間を挿入できなくなりますが、複数の異なる時間を無効にしたいです。これはmysqlで可能ですか?

同じ DAY と ORDER に複数の異なる TIME 値があるすべてのレコードを見つけて削除できますか?

この場合、重複した ORDER が挿入されているため、レコード 7,8 および 9 を SQL クエリで削除したいと思います。

テーブルを正規化したくありません。このデータベース構造に固執します。

どうもありがとうございました

4

2 に答える 2

0

句とともに使用deleteして、重複を見つけて削除できます。join

delete
    from t join
         (select day, "order", min(time) as tokeeptime
          from t
          group by day, "order"
         ) tokeep
         on t.day = tokeep.day and t."order" = tokeep."order" and t.time <> tokeeptime;
于 2013-09-13T14:18:55.343 に答える
0
DELETE  a
FROM    tableName a
        INNER JOIN
        (
            SELECT  a.DAY, a.ORDER, MAX(a.TIME) Time
            FROM    tableName a
            GROUP   BY a.DAY, a.ORDER
            HAVING  COUNT(DISTINCT TIME) > 1
        ) b ON a.DAY = b.DAY AND
                a.Order = b.Order AND
                a.Time = b.Time
于 2013-09-13T14:22:55.080 に答える