ホームページ >データベース >mysql チュートリアル >未変更の予約をデータベースから効率的に取得するにはどうすればよいですか?
未変更の予約のデータベース クエリ
この記事では、reservation
と reservation_log
という 2 つのテーブルを持つデータベースから未変更の予約を効率的に取得する方法について説明します。 単純な WHERE
句は、キャンセルされていない予約を見つけるのには理想的ではありません。より洗練されたアプローチが必要です。
方法 1: NOT IN
1 つの方法では、否定を使用してキャンセルされた予約を除外します。 reservation_log
でキャンセルされた予約を特定し、reservation
テーブルからその ID を除外します:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
方法 2: LEFT JOIN
特にインデックス付き列のパフォーマンスを向上させるには、LEFT JOIN
をお勧めします。
<code class="language-sql">SELECT r.* FROM reservation r LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel' WHERE l.id IS NULL;</code>
この LEFT JOIN
は、reservation
テーブルからすべての行を返します。 reservation_log
からの一致する行 (キャンセルが存在する場合) が含まれます。 WHERE l.id IS NULL
句は結果をフィルターし、reservation_log
に一致するキャンセル エントリがない予約のみを返します。
どちらの方法でも、キャンセルされていない予約を効率的に取得できます。 LEFT JOIN
アプローチは通常、優れたパフォーマンスを提供します。 最適な方法の選択は、データベースのサイズとインデックス作成によって異なります。
以上が未変更の予約をデータベースから効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。