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

时间:2015-10-01 06:45:37

标签: mysql wordpress selection buddypress except

问题

我使用forpressress for Wordpress它有一个私人消息表,它是消息线程的线程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个我不希望删除。

2 个答案:

答案 0 :(得分:1)

这应该有效:

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

此查询的子选择获取最后10个发送的项目。主查询必须删除ID为X的项目,除非该项目位于子选择的结果上。

答案 1 :(得分:0)

我不确定buddypress中的表是如何工作的,但我猜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)