LEFT JOIN 2 INNER JOIN表没有子查询

时间:2015-03-09 18:41:58

标签: mysql left-join

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

我想要列出所有工作以及每个工作提交的“任何”应用程序,但前提是我有提交申请的用户的数据。

我依稀记得看到一些模糊的语法,其中2个表连接到一个查询,好像是一个表,如:

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

2 个答案:

答案 0 :(得分:1)

你几乎就在那里,唯一的错误就是在第二次加入之后加入两个连接条件。

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

答案 1 :(得分:1)

如果你以“简单”的方式链接它们,你需要这两个都是外连接:

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