在 SQL 中,侧连接(lateral join)是一种特殊的连接类型,它允许 FROM 子句中的子查询引用同一 FROM 子句中前面的表的列。它本质上使你能够针对外部查询中的每一行运行一个相关子查询。这意味着,对于外部表处理的每一行,子查询可以访问该行的值,有效地将其视为与外部查询中的其他行“平行”。侧连接的语法通常涉及关键字 LATERAL
,它定义了子查询相对于外部查询的作用域。
为了说明侧连接是如何工作的,考虑一个包含两个表的例子:employees
(员工)和 projects
(项目)。假设你想列出每个员工及其最新的项目。你可以编写一个查询,主要部分从 employees
表中选择,而侧子查询则通过使用访问员工 ID 的条件来检索每个员工的最新项目。侧连接允许子查询在确定返回哪个项目时考虑每个员工的详细信息。
使用 LATERAL
关键字,SQL 查询看起来像这样:
SELECT e.name, p.project_name
FROM employees e
CROSS JOIN LATERAL (
SELECT project_name
FROM projects
WHERE projects.employee_id = e.id
ORDER BY start_date DESC
LIMIT 1
) p;
在这个查询中,对于每个员工,子查询根据 start_date
获取最新的项目,确保表之间的关系得到妥善维护。通过使用侧连接,你可以有效地关联主查询和子查询数据,从而使 SQL 查询更加可读和可维护。