查找未取消预订的 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中文网其他相关文章!