ホームページ >データベース >mysql チュートリアル >予約ログを含むデータベースからキャンセルされていない予約を取得するにはどうすればよいですか?

予約ログを含むデータベースからキャンセルされていない予約を取得するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 19:37:09538ブラウズ

How to Retrieve Uncancelled Reservations from a Database with Reservation Logs?

データベース内のアクティブな予約の識別

この記事では、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) が含まれます。それ以外の場合、ll.id になります。 NULL 条件は、一致するキャンセルのある行をフィルターで除外し、キャンセルされていない予約を効果的に分離します。 最終結果では予約データ(WHERE l.id IS NULL)のみが選択されます。r.*

どちらの方法でも同じ結果が得られ、キャンセルされていない予約のリストが提供されます。どちらを選択するかは、多くの場合、データベース システムとデータ ボリュームに固有のパフォーマンスの考慮事項によって決まります。

以上が予約ログを含むデータベースからキャンセルされていない予約を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。