MaxCompute SQL不支持在普通JOIN的ON条件中使用不等值表达式、OR逻辑等复杂的JOIN条件,但是在MAPJOIN中可以进行上述操作。
SELECT /* + MAPJOIN(b) */
a.err_code
,a.desc_cn
,SUBSTRING_INDEX(SUBSTRING_INDEX(a.chans,',',b.AutoIncreID),',',-1)
FROM (
SELECT err_code
,desc_cn
,CASE WHEN chans IS NULL THEN ''
ELSE chans
END AS chans
FROM devops.dim_sms_error_code
) a
JOIN devops.incre_table b
ON b.AutoIncreID <= (LENGTH(a.chans) - LENGTH(REPLACE(a.chans,',','')) + 1)
;
注意/* + MAPJOIN(b) */语法就是这么写的,不是注释。