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

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

Barbara Streisand
发布: 2025-01-23 19:42:11
原创
772 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板