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 值的所有记录并删除它们?

在这种情况下,我想用 SQL 查询删除记录 7,8 ad 9,因为它是重复的 ORDER 插入。

我不想规范化表我会坚持这个数据库结构。

非常感谢

4

2 回答 2

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 回答
0

您可以使用deletewithjoin子句查找重复项并将其删除:

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 回答