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
二维码
打赏
共有0条评论