未修改預訂的資料庫查詢
本文解決了從具有兩個表格的資料庫中高效檢索未修改的預訂的問題:reservation
和 reservation_log
。 簡單的 WHERE
子句並不適合尋找未取消的預訂;需要更複雜的方法。
方法1:使用NOT IN
一種方法使用否定來排除已取消的預訂。 我們在 reservation_log
中識別已取消的預訂,並從 reservation
表中排除其 ID:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
方法二:使用LEFT JOIN
為了獲得更好的效能,尤其是索引列,建議使用 LEFT JOIN
:
<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
中沒有符合取消條目的預訂。
這兩種方法都可以有效檢索未取消的預訂。 LEFT JOIN
方法通常提供卓越的性能。 選擇最佳方法取決於資料庫大小和索引。
以上是如何有效地從資料庫中檢索未修改的預訂?的詳細內容。更多資訊請關注PHP中文網其他相關文章!