キャンセルされていない予約を検索するための SQL テクニック
この記事では、reservation
テーブルと reservation_log
テーブルを使用してデータベースからキャンセルされていない予約を取得する 2 つの効率的な SQL メソッドについて説明します。 目的は、キャンセル記録のない予約のみを選択することです。
方法 1: サブクエリで NOT IN
を使用する
このアプローチでは、サブクエリを使用して、reservation_log
テーブルに存在する change_type
が「キャンセル」である予約 ID を識別します。次に、メイン クエリは、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
を使用して reservation
テーブルと reservation_log
テーブルを結合します。 LEFT JOIN
は、右側のテーブル (reservation
) に一致するものがない場合でも、左側のテーブル (reservation_log
) のすべての行を返します。 一致するものが存在しない場合、右側のテーブルの列は NULL
になります。 NULL
列の change_type
値をフィルタリングすると、キャンセルされていない予約が分離されます:
<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
サブクエリに関連する潜在的なパフォーマンスの問題を回避できるため、一般に NOT IN
アプローチの方がパフォーマンスが向上し、特に大規模なデータセットの場合に好まれます。 データベース システムとデータ量に最適な方法を選択してください。
以上がSQL を使用してキャンセルされていない予約を検索する方法:「NOT IN」と「LEFT JOIN」?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。