関連する 2 つの 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 を含む行について、最新の 5 項目を除くすべての ObjectCustomFieldValues ID と Transactions ID を取得します。
これを、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