未修改预订的数据库查询
本文解决了从具有两个表的数据库中高效检索未修改的预订的问题: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中文网其他相关文章!