MySQL多表查询:如何LEFT JOIN关联的5张业务表?
获取所有Citation Sources(含无关联数据的记录)
没问题!要实现这个需求,核心是用左外连接(LEFT OUTER JOIN)——它会保留左表(这里就是citation_sources)的全部记录,哪怕关联的其他表没有匹配的数据。
先结合你的表结构逻辑,我假设各表的关联字段如下(如果实际字段名不同,你可以对应替换):
citation_sources和citation_login通过citation_source_id关联citation_login和owners通过owner_id关联owners和shops通过owner_id关联- 商铺添加到引用源的关联,假设是
citation_login和shops之间的直接关联(如果有单独的关联表,比如citation_shop_listings,也可以加入左连接)
示例查询语句
SELECT cs.*, cl.login_id, cl.username, -- 可选:citation_login的字段 o.owner_id, o.name, -- 可选:owners的字段 s.shop_id, s.shop_name -- 可选:shops的字段 FROM citation_sources cs LEFT OUTER JOIN citation_login cl ON cs.citation_source_id = cl.citation_source_id LEFT OUTER JOIN owners o ON cl.owner_id = o.owner_id LEFT OUTER JOIN shops s ON o.owner_id = s.owner_id ORDER BY cs.citation_source_id;
关键说明
- 左连接的作用:每一层都用
LEFT OUTER JOIN(可以简写为LEFT JOIN),确保citation_sources的每一条记录都被保留,哪怕没有对应的citation_login、owners或shops数据——这些不存在的关联字段会显示为NULL。 - 字段选择:你可以根据需求调整
SELECT后的字段,只保留你需要的信息。如果不需要某些关联表的字段,甚至可以去掉对应的左连接。 - 关联字段调整:如果你的表之间的关联字段不是我假设的(比如
citation_sources的主键是id而不是citation_source_id),记得替换成实际的字段名。
如果你的商铺添加到引用源的逻辑是通过单独的关联表(比如citation_shop_listings),可以在查询中加入额外的左连接:
LEFT OUTER JOIN citation_shop_listings csl ON cl.login_id = csl.login_id LEFT OUTER JOIN shops s ON csl.shop_id = s.shop_id
这样就能确保你获取到所有的引用源记录,无论它们是否有对应的客户、登录凭证或商铺关联数据。
内容的提问来源于stack exchange,提问作者Tom Hall
相关产品推荐
相关产品推荐

