本文示範了兩種 SQL 查詢方法,用於從包含 reservation
和 reservation_log
表格的資料庫中檢索未取消的預訂。 只有當 change_type = 'cancel'
表中存在帶有 reservation_log
的相應條目時,預訂才會被視為已取消。
方法一: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
值。然後,外部查詢傳回 id
不 出現在此取消清單中的所有預訂。
方法 2:LEFT JOIN
具有 IS NULL
條件
此方法使用 LEFT JOIN
來組合 reservation
和 reservation_log
表。 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
表 (r
) 中的所有行。 如果存在匹配的取消,則包含相應的reservation_log
資料(l
);否則,l.id
將是 NULL
。 WHERE l.id IS NULL
條件過濾掉具有符合取消的行,從而有效地隔離未取消的預訂。 最終結果僅選擇預訂資料(r.*
)。
兩種方法實現相同的結果,提供未取消的預訂清單。它們之間的選擇通常取決於特定於資料庫系統和資料量的效能考量。
以上是如何從有預訂日誌的資料庫中檢索未取消的預訂?的詳細內容。更多資訊請關注PHP中文網其他相關文章!