我有示例数据
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上设置唯一索引,我无论如何都无法插入多个时间,但我想禁用多个不同的TIME。这可以用mysql吗?
我可以找到同一天和ORDER中有多个不同TIME值的所有记录并删除它们吗?
在这种情况下,我想删除带有SQL查询的记录7,8和9,因为它是重复的ORDER插入。
我不想规范化表格我会坚持使用这个数据库结构。
非常感谢
答案 0 :(得分: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;
答案 1 :(得分: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