[英]SQL How to join 2 tables with or without
我有兩張桌子,一張是人,一張是聯系時間。 我想要的是根據聯系日期加入每個人的最大聯系時間。 見下圖。
我可以在有聯系時刻的最大聯系日期加入每個人(因此我在上面的示例中為 John 和 Frank 取回了數據)。 但是,我無法讓沒有聯系時間的人也出現(比爾和凱文)。 為此,我需要幫助。
到目前為止,我所做的如下:
SELECT
Person.Id,
Person.Name,
Contact.Id
FROM
Person,
Contact
RIGHT JOIN (
SELECT Contact.PersonId,
MAX(Contact.Date) AS MaxDate
FROM Contact
GROUP BY Contact.PersonId
) GroupedContact ON
Contact.PersonId = GroupedContact.PersonId AND
Contact.Date = GroupedContact.MaxDate
WHERE
Person.Id = Contact.PersonId
我知道這里的 WHERE 會導致一些問題,但是如果我完全刪除它,我的查詢將不會停止運行並且我會超時。 任何人都可以幫助我,因為我無法弄清楚。
刪除額外的不必要的加入聯系:
SELECT
Person.Id,
Person.Name,
GroupedContact.MaxDate as outputCol
FROM
Person
LEFT JOIN (
SELECT Contact.PersonId,
MAX(Contact.Date) AS MaxDate
FROM Contact
GROUP BY Contact.PersonId
) GroupedContact ON
Person.PersonId = GroupedContact.PersonId
一些注意事項:永遠不要混合隱式和顯式連接。 始終使用顯式連接。 您在這里需要一個LEFT
連接,這意味着 -> 保留LEFT
表中的所有記錄以及與RIGHT
表匹配的記錄。
您需要 LEFT 加入而不是 RIGHT 並且不需要額外加入聯系人:
SELECT
Person.Id,
Person.Name,
GroupedContact.MaxDate
FROM Person
LEFT JOIN
(
SELECT Contact.PersonId,
MAX(Contact.Date) AS MaxDate
FROM Contact
GROUP BY Contact.PersonId
) GroupedContact
ON Person.Id = GroupedContact.PersonId
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.