多表关联查询:如何保留Email、Phone字段为空值的所有行?
解决方案建议
问题出在你使用的**内连接(JOIN)**上:内连接仅返回关联条件两边都存在匹配记录的行。如果客户在LegacyCustomerContactData表中没有对应ID_3的匹配记录,或者匹配记录里Email/Phone为空,内连接会直接过滤掉这些行。
要实现即使Email、Phone为空也能查询到所有符合关联条件的行,只需将最后一个内连接替换为左连接(LEFT JOIN):
SELECT a.ID_1 ,b.Tier ,e.Email ,e.Phone FROM CustomerActivity a JOIN CustomerSummary b ON a.ID_1 = b.ID_1 JOIN DimensionCustomer c ON b.ID_1 = c.ID_1 JOIN LegacyCustomerMapping d ON c.ID_2 = d.ID_2 LEFT JOIN LegacyCustomerContactData e -- 替换为LEFT JOIN ON d.ID_3 = e.ID_3
左连接的逻辑是:保留左侧所有已关联的行(即CustomerActivity到LegacyCustomerMapping的匹配结果),如果右侧LegacyCustomerContactData有匹配的ID_3,则显示对应的Email和Phone;如果没有匹配,或者匹配记录的Email/Phone为空,这两个字段会以NULL值返回,但不会过滤掉整行数据。
内容的提问来源于stack exchange,提问作者Lengus
相关产品推荐
相关产品推荐

