mysql多字段join场景高效处理方法

场景:需要多个字段一起查询并且groupby 而且是多个表需要join保持一致性的查询

sql代码:

SELECT
	SUBSTRING_INDEX( main.groupKey, '&', 1 ) as employee_abbr_name,  -- 注意第一个直接取即可
	SUBSTRING_INDEX( SUBSTRING_INDEX( main.groupKey, '&', 2 ), '&', - 1 ) AS media_source,  -- 注意第二个需要处理一次才可以
	SUBSTRING_INDEX( SUBSTRING_INDEX( main.groupKey, '&', 3 ), '&', - 1 ) AS platform,     -- 注意第三个跟第二个类似
	.... 
FROM
(
	SELECT
	   -- 多个字段通过 CONCAT_WS('分隔符',字段)来合并  需要主要 NULL的问题会导致数据异常 需要判断
		CONCAT_WS( '&', IFNULL( employee_abbr_name, '' ), IFNULL( media_source, '' ), IFNULL( platform, '' ) ) AS groupKey 
	FROM table1 
	WHERE 	1 = 1 
	GROUP BY 1 
) main
LEFT JOIN (
	SELECT
	   -- 多个字段通过 CONCAT_WS('分隔符',字段)来合并  需要主要 NULL的问题会导致数据异常 需要判断
		CONCAT_WS( '&', IFNULL( employee_abbr_name, '' ), IFNULL( media_source, '' ), IFNULL( platform, '' ) ) AS groupKey 
	FROM table2 
	WHERE 1 = 1 
	GROUP BY 1 
) table2 ON table1.groupKey = table2.groupKey
LEFT JOIN table3 ON SUBSTRING_INDEX( main.groupKey, '&', 1 ) = table3.xxx
-- JOIN时候需要特殊处理这里这个字段 SUBSTRING_INDEX( main.groupKey, '&', 1 )


版权声明:
作者:超级管理员
链接: https://blog.apecloud.ltd/article/detail.html?id=180
来源:猿码云个人技术站
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
/static/admin/img/weixin.jpg/static/admin/img/zfb.jpg
<<上一篇>
8000+热门短剧,自助搜索,一次性看到爽,再也不用担心收费了
下一篇>>