没有子查询的 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)。
如果您以 "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
我有 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)。
如果您以 "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