キャンセルされていない予約を効率的に取得する効果的な方法
この記事では、2 つのテーブル (予約テーブルと予約ログ テーブル) からキャンセルされていない予約情報を効率的に取得する方法について説明します。予約テーブルには予約の詳細が保存され、予約ログ テーブルには予約の変更が記録されます。
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
列がサブクエリ結果に含まれていないすべての行を取得します。サブクエリは、reservation_log
が「キャンセル」である change_type
テーブル内の reservation_id
値を選択します。
もう 1 つのオプションは、LEFT 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
テーブル内に一致する行があるかどうかに関係なく、reservation_log
テーブル内のすべての行を含めます。 WHERE l.id IS NULL
句は、reservation_log
の一致する行が存在する change_type='cancel'
テーブル内のすべての行をフィルターで除外し、キャンセルされていない予約のみを残します。
以上が2 つのテーブルからキャンセルされていない予約を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。