次のクエリが機能しない理由は、私の考えを完全に超えています。
DELETE orig FROM revision AS orig JOIN (
SELECT id
FROM revision
GROUP BY id
HAVING COUNT(*) > 1
) AS joined ON orig.id = joined.id
WHERE orig.id=1
ORDER BY orig.delta ASC
LIMIT 1
エラーは 8 行目でスローされるため、ORDER BY
句. ただし、問題はありません (テーブルrevision
には という列がありますdelta
)。さらに、に変更DELETE orig
するとSELECT *
、コマンドが完全に機能します。
delta
-column がロードされていない可能性はありますか? または、このエラーの原因は何ですか?
編集
ああ、クエリORDER BY
で複数の行を使用できないことを知りませんでした。DELETE
さて、私が達成しようとしているのは、テーブル内の 1 つの行を削除することです。この行には、複数回発生する ID があり (本番環境では 5 になります)、その ID を持つすべての行の中で最も低いデルタがあります。
つまり、リビジョン テーブルに 2 つの行があり、どちらも同じ ID です。2 つのうちデルタが最も低い行を削除したいと思います。これはスケーラブルである必要があるため、(同じ ID を持つ) すべての行を削除しますが、1 つ (デルタが最大のもの) を削除します。