首页 >数据库 >mysql教程 >MySQL 中的自连接如何工作来比较同一个表中的行?

MySQL 中的自连接如何工作来比较同一个表中的行?

DDD
DDD原创
2024-11-19 00:22:02739浏览

How do self-joins work in MySQL to compare rows from the same table?

MySQL 自联接如何工作?

MySQL 中的自联接涉及联接同一个表的两个实例,通常使用不同的别名。它允许您根据特定条件比较同一表的行。

查询解释

让我们分解给定的查询:

SELECT event2.id, event2.startdate, event2.price
FROM mm_eventlist_dates event1
JOIN mm_eventlist_dates event2 
ON event2.startdate = date_add(event1.enddate, INTERVAL 1 DAY)
WHERE event1.id=$id

FROM 子句

这指定了哪些表join:

FROM mm_eventlist_dates event1
JOIN mm_eventlist_dates event2 

同一个表 mm_eventlist_dates 使用两次并别名为 event1 和 event2。

ON 子句

这将连接基于条件的表的两个实例:

ON event2.startdate = date_add(event1.enddate, INTERVAL 1 DAY)

它找到event2 中的开始日期与 event1 中相应行的结束日期之后的日期相匹配的行。

WHERE 子句

这将根据指定条件过滤结果:

WHERE event1.id=$id

它从 event1 中选择 id 与给定变量匹配的行, $id。

SELECT 子句

这将从连接的行中选择所需的字段:

SELECT event2.id, event2.startdate, event2.price

它检索 ID、开始日期、 event2 实例中的价格,其中包含有关指定事件 (event1) 之后的事件的信息

视觉演示

假设您在 mm_eventlist_dates 表中有以下记录:

event1.id event1.enddate event2.id event2.startdate
1 2023-03-01 2 2023-03-02
3 2023-03-03 4 2023-03-04

使用给定的查询:

  • 它检索 id 等于 $id 的 event1 (例如,1)。
  • 它计算结束日期加一天 (2023-03-02)。
  • 它在 event2 中搜索具有相同开始日期 (2023-03-02) 的行).
  • 返回匹配事件的 ID、开始日期和价格2 row.

这演示了 MySQL 自联接如何允许您根据指定条件识别相关行,即使在同一个表中也是如此。

以上是MySQL 中的自连接如何工作来比较同一个表中的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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