没有子查询的 LEFT JOIN 2 INNER JOIN 表

LEFT JOIN 2 INNER JOIN Tables Without Subquery

我有 3 个表:工作、用户、应用程序。

我想要一份所有工作的列表,以及每个工作提交的可选“任何”申请的列表,但前提是我有提交申请的用户的数据。

我依稀记得看到一些晦涩的语法,其中 2 个 table 被连接到一个查询中,就好像是一个 table,比如:

select j.title, a.id, u.name from jobs j
left join applications a join users u on a.job_id=j.id and a.user_id = u.id

我知道我可以使用子查询来完成此操作,但是是否存在这种性质的语法?

更新

到目前为止,我收到的答案都是假设我只需要基本连接。尽管它们打破了问题中提出的预期逻辑。也许我应该发布等效的子查询来说明我想要 运行.

的查询类型
select j.job_id, au.application_id, au.user_id from jobs j
left join (
select a.job_id, u.user_id from applications a
join users u on u.user_id = a.user_id
) au on j.job_id = au.job_id

您差不多就完成了,您唯一的错误是将两个连接条件放在第二个连接之后。

select * 
from jobs j
left join application a on on.job_id = j.id
left join users u on u.user_id = u.id

请注意,连接中可以引用的最大表数为 61(在 MySQL 中,可能是大多数流行的 DBMS)。

See documentation.

如果您以 "simple" 方式链接它们,则需要这两个都是外连接:

select * 
from jobs j
left outer join application a on a.job_id = j.id
left outer join users u on u.user_id = a.id

由于我认为应用程序需要用户,因此您可以通过这种方式强制首先发生内部连接。也许这就是您要问的语法问题。根据我的经验,parens 通常是可选的,但我不太了解 MySQL:

select * 
from jobs j
left outer join (application a
inner join users u on a.user_id = u.id) on a.job_id = j.id

这是有时会出现右连接的地方,因此可以从上到下编写查询而无需任何嵌套:

select * 
from application a 
inner join users u on u.user_id = a.id on 
right outer join jobs j on a.job_id = j.id