簡體   English   中英

沒有子查詢的LEFT JOIN 2 INNER JOIN表

[英]LEFT JOIN 2 INNER JOIN Tables Without Subquery

我有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

您快要在那里了,您唯一的錯誤是將第二個連接條件放在第二個連接之后。

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)。

請參閱文檔

如果以“簡單”方式將它們鏈接起來,則需要將它們都作為外部聯接:

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

由於我認為應用程序需要用戶,因此您可以以這種方式強制首先進行內部聯接。 也許這就是您要詢問的語法問題。 在我的經驗中,括號通常是可選的,但我對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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM