ホームページ >データベース >mysql チュートリアル >予約ログを含むデータベースからキャンセルされていない予約を取得するにはどうすればよいですか?
この記事では、reservation
テーブルと reservation_log
テーブルを含むデータベースからキャンセルされていない予約を取得するための 2 つの SQL クエリ方法を示します。 予約は、change_type = 'cancel'
を持つ対応するエントリが reservation_log
テーブルに存在する場合にのみキャンセルされたとみなされます。
方法 1: NOT IN
サブクエリ
このアプローチでは、サブクエリを使用してキャンセルされた予約を特定し、それらをメイン クエリの結果から除外します。
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
内部クエリは、キャンセルに関連付けられたすべての reservation_id
値を選択します。次に、外側のクエリは、id
がこのキャンセル リストに存在しないであるすべての予約を返します。
方法 2: LEFT JOIN
条件付き IS NULL
を使用して LEFT JOIN
テーブルと reservation
テーブルを結合します。 reservation_log
条件により、キャンセルのみが考慮されます。 JOIN
句は、一致するキャンセルが見つからない行をフィルターします:WHERE
<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
) からすべての行を返します。 一致するキャンセルが存在する場合、対応する r
データ (reservation_log
) が含まれます。それ以外の場合、l
は l.id
になります。 NULL
条件は、一致するキャンセルのある行をフィルターで除外し、キャンセルされていない予約を効果的に分離します。 最終結果では予約データ(WHERE l.id IS NULL
)のみが選択されます。r.*
以上が予約ログを含むデータベースからキャンセルされていない予約を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。