首頁 > 資料庫 > mysql教程 > 如何使用 SQL 尋找未取消的預訂:「NOT IN」與「LEFT JOIN」?

如何使用 SQL 尋找未取消的預訂:「NOT IN」與「LEFT JOIN」?

Barbara Streisand
發布: 2025-01-23 19:42:11
原創
772 人瀏覽過

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

尋找未取消預訂的 SQL 技術

本文探討了兩種高效的 SQL 方法,用於從具有 reservationreservation_log 表的資料庫中檢索未取消的預訂。 目的是僅選擇那些沒有取消記錄的預訂。

方法 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 來組合 reservationreservation_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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板