ホームページ > データベース > mysql チュートリアル > SQL を使用してキャンセルされていない予約を検索する方法:「NOT IN」と「LEFT JOIN」?

SQL を使用してキャンセルされていない予約を検索する方法:「NOT IN」と「LEFT JOIN」?

Barbara Streisand
リリース: 2025-01-23 19:42:11
オリジナル
824 人が閲覧しました

How to Find Uncancelled Reservations Using SQL: `NOT IN` vs. `LEFT JOIN`?

キャンセルされていない予約を検索するための 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート