我有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
答案 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)。
答案 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