0

関連する 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

4

1 に答える 1