我正在试验一个用于修剪两个相关 mysql 表的查询。我将使用它来删除除最新条目之外的所有条目。
此查询的行为完全符合我的预期:
SELECT
O.id AS O_id,
T.id AS T_id
FROM
rt.ObjectCustomFieldValues AS O
LEFT JOIN rt.Transactions AS T
ON O.id = T.NewReference
WHERE
O.Disabled = 1
AND O.CustomField = 58
AND O.ObjectId = 202784
AND T.id NOT IN (
SELECT
id
FROM
(
SELECT
id
FROM
Transactions
WHERE
Field = 58
AND ObjectId = 202784
ORDER BY
Created DESC
LIMIT 5
) Test
)
对于包含 ObjectId 202784 的行,我得到了 ObjectCustomFieldValues ids 和 Transactions ids,但最近的 5 个项目除外。
现在,如何将其转换为可以在所有行上运行而不是手动指定 ObjectId 的通用查询?
总而言之,对于字段 id 58,我想迭代所有 ObjectId 值,并且对于每个值,删除除最近的 ObjectCustomFieldValues 和 Transactions 之外的所有值。
您可以在此处查看架构详细信息:
https ://github.com/bestpractical/rt/blob/stable/etc/schema.mysql#L112
和这里:
https://github.com/bestpractical/rt/blob/stable/etc/schema.mysql#L328