高效檢索未取消預訂的有效方法
本文探討如何從兩個表(預訂表和預訂日誌表)中高效檢索未取消的預訂資訊。預訂表儲存預訂詳情,預訂日誌表記錄預訂變更。
一種方法是先選取已取消的預訂,然後將其從結果中排除。但此方法需要額外連接預訂日誌表來取得已取消的預訂,效率較低。
更有效率的方案是使用子查詢中的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
為'cancel'的reservation_id
值。
另一個選擇是使用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'
的所有符合行的行,只留下未取消的預訂。
以上是如何有效率地檢索兩個表中未取消的預訂?的詳細內容。更多資訊請關注PHP中文網其他相關文章!