【发布时间】:2009-05-24 01:29:43
【问题描述】:
我有一个包含许多行的表格。保证已按名为created_on 的列的顺序插入行,该列是datetime 列。如果给定行在现有行的 5 秒内有 created_on 时间,我想删除给定行。
如何编写查询来删除这些行?
【问题讨论】:
标签: mysql database date delete-row
我有一个包含许多行的表格。保证已按名为created_on 的列的顺序插入行,该列是datetime 列。如果给定行在现有行的 5 秒内有 created_on 时间,我想删除给定行。
如何编写查询来删除这些行?
【问题讨论】:
标签: mysql database date delete-row
SELECT *
FROM TABLE AS A
WHERE EXISTS (
SELECT *
FROM TABLE AS B
WHERE DATE_SUB(A.created_on, INTERVAL 5 SECOND) <= B.created_on
AND B.created_on < A.created_on
)
你明白了,这基本上会删除所有5秒内的事件链,除了链中的第一个事件。
因为您不能在 DELETE 中为表设置别名,所以您必须执行以下操作:
DELETE
FROM so902859
WHERE created_on IN (
SELECT created_on
FROM so902859 AS A
WHERE EXISTS ( SELECT *
FROM so902859 AS B
WHERE DATE_SUB(A.created_on, INTERVAL 5 SECOND) <= B.created_on
AND B.created_on < A.created_on ) )
有上百万种方法可以使用 JOIN 或其他方法来给这只猫剥皮。我认为这是最清楚易懂的,虽然有点冗长。
【讨论】:
where exists 不适用于 delete,仅适用于 select。我不确定如何制定它以在一个查询中工作。