Mysql:从 table 中删除 ID,除了选择中的行?

Mysql: Delete from table where ID, except rows in a selection?

问题

我正在为 Wordpress 使用 buddypress,它有一个 table 用于私人消息,它是消息线程的线程 ID。目前,一个线程中可以包含多少条消息没有限制。

我想创建一个命令来删除线程中除了最近的 10 条消息之外的所有消息。以下是逻辑,但我不确定执行此操作的正确语法?

各位mysql天才知道答案吗?

DELETE FROM TABLEA WHERE id = X 删除线程ID为x的所有内容

EXCEPT 
(SELECT * FROM TABLEA WHERE id = X ORDER BY date_sent DESC LIMIT 10) 

选择最近的 10 个我不想删除的。

这应该有效:

DELETE FROM TABLEA WHERE id = X AND id NOT IN (
    SELECT TOP 10 id FROM TABLEA ORDER BY date_sent DESC
)

此查询的子select 获取最后 10 个已发送的项目。主查询必须删除 ID 为 X 的项目,除非该项目位于子 select.

的结果上

我不确定 buddypress 中的 table 是如何工作的,但我想 TABLEA 应该有它的主键 ID。如果 TABLEA 确实有自己的主键 ID,这是我的解决方案。

DELETE FROM TABLEA WHERE id = x AND TABLEA_id NOT IN 
    (SELECT TABLEA_id FROM TABLEA WHERE id = x ORDER BY date_sent DESC LIMIT 10)