私はこのクエリを持っています:
SELECT p.id, r.status, r.title
FROM page AS p
INNER JOIN page_revision as r ON r.pageId = p.id AND (
r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId AND r2.status = 'active')
OR r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId)
)
これは、アクティブなリビジョンがない場合を除き、各ページとそれぞれの最新のアクティブなリビジョンを返します。アクティブなリビジョンがない場合は、単に最新のリビジョンを返します。
これを最適化してパフォーマンスや一般的な読みやすさを向上させる方法はありますか? 今のところ問題はありませんが、心配なのは、これが実稼働環境 (大量のページが存在する可能性がある環境) に入ると、パフォーマンスが低下することです。
また、私が知っておくべき明らかな問題はありますか? サブクエリの使用は常に私を悩ませますが、私の知る限り、サブクエリなしではこれを行うことはできません.
注:
条件が WHERE 句ではなく JOIN にある理由は、他のクエリ (これと同じロジックが使用されている場合) で、「サイト」テーブルから「ページ」テーブルに LEFT JOIN しているためです。まだサイトを返してほしい。
ジャック
編集: MySQLを使用しています