首页 >数据库 >mysql教程 >如何使用 SQL 查找未取消的预订:'NOT IN”与'LEFT JOIN”?

如何使用 SQL 查找未取消的预订:'NOT IN”与'LEFT JOIN”?

Barbara Streisand
Barbara Streisand原创
2025-01-23 19:42:11773浏览

How to Find Uncancelled Reservations Using SQL: `NOT IN` vs. `LEFT JOIN`?

查找未取消预订的 SQL 技术

本文探讨了两种高效的 SQL 方法,用于从具有 reservationreservation_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 来组合 reservationreservation_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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn