尋找未取消預訂的 SQL 技術
本文探討了兩種高效的 SQL 方法,用於從具有 reservation
和 reservation_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
來組合 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中文網其他相關文章!