Join
即使在所有表中都沒有滿足條件,也從 SQL JOIN 返回結果
SQL 新手。建構我的第一個聯繫人管理器項目。目前架構如下所示。
問題:
- 我正在研究顯示給定聯繫人的所有聯繫人類型(電話、電子郵件、社交、地址)的視圖。
- 我將以下嘗試放在一起,但它僅
contactGUID
在每個 contact_type 表中都返回結果。--Problem: Only returns records if contactGUID is present in every contact_type table SELECT c.contGUID, c.contType, i.indTitle, i.indFirstName, i.indMidName, i.indLastName, e.emailAddress, e.emailDomain, p.phnCountryCode, p.phnAreaCode, p.phnNumber, s.socURL, s.socHandle, a.addrCountry, a.addrCountryCode, a.addrCountrySubdivision, a.addrCountrySubName, a.addrSecondarySubdiv, a.addrMunicipality, a.addrMuniSubdivision, a.addrStreetNumber, a.addrStreetName, a.addrPostalCode, a.addrLatitude, a.addrLongitude FROM CONTACT c JOIN INDIVIDUALS i ON c.contGUID = i.indGUID JOIN CONTACT_EMAIL ce ON c.contGUID = ce.contactGUID JOIN EMAILS e ON ce.emailGUID = e.emailGUID JOIN CONTACT_PHONE cp ON c.contGUID = cp.contactGUID JOIN PHONES p ON cp.phnGUID = p.phnGUID JOIN CONTACT_SOCIAL cs ON c.contGUID = cs.contactGUID JOIN SOCIALS s ON cs.socGUID = s.socGUID JOIN CONTACT_PHYS_ADDRESS cpa ON c.contGUID = cpa.contactGUID JOIN PHYS_ADDRESSES a ON cpa.addrGUID = a.addrGUID
問題:
CONTACT_PHONE
如果給定的記錄不存在,我如何返回所有其他聯繫類型(電子郵件、社交、地址)contactGUID
?
正如 Akina 所提到的,您需要使用一個
OUTER JOIN
,特別LEFT OUTER JOIN
或更簡單地寫成LEFT JOIN
從 join 子句的左側獲取所有記錄,在它們與子句右側匹配的地方加入,然後只NULL
取出欄位它們在右側不匹配的地方。W3Schools的本教程簡要介紹了不同連接類型的視覺效果。這是另一篇文章,其中包含有關不同連接類型的更多資訊。(請注意,這些文章與數據庫無關,您的特定係統可能還有其他可用的連接類型,但這些通常都是需要的。)您之前所做的只是指定
JOIN
使用該INNER JOIN
子句的簡寫語法,它只返回在連接子句兩側匹配的行。