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)
问题
我正在为 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)