MariaDB多表单查询多FULL JOIN实现及报错问题咨询
报错核心原因
MariaDB 从诞生至今所有稳定版本(包括你使用的10.4.14)原生不支持 FULL JOIN 语法,直接书写该连接关键字会在语法解析阶段触发报错,与表结构、关联逻辑无关。
全连接效果的等价实现方案
针对reception和lect_prefet两张表基于公共字段num_courrier关联的场景,可通过左连接、右连接结果合并的方式模拟和原生FULL JOIN完全一致的返回效果,覆盖「左表存在右表无匹配、右表存在左表无匹配、两表关联匹配」的所有数据,对应可执行的查询语句如下:
SELECT reception.num_courrier, reception.date_recep, reception.expediteur, reception.objet, lect_prefet.date_lect_prefet, lect_prefet.instructions, lect_prefet.caractere FROM reception LEFT JOIN lect_prefet ON reception.num_courrier = lect_prefet.num_courrier UNION SELECT reception.num_courrier, reception.date_recep, reception.expediteur, reception.objet, lect_prefet.date_lect_prefet, lect_prefet.instructions, lect_prefet.caractere FROM reception RIGHT JOIN lect_prefet ON reception.num_courrier = lect_prefet.num_courrier;
说明:
UNION会自动剔除查询结果中完全重复的行,和原生FULL JOIN的行为完全对齐;如果业务场景允许重复行,可将UNION替换为UNION ALL,减少去重环节的性能消耗。
多表全量查询的落地建议
针对你需要单条查询覆盖所有表内容、支撑后续检索工作的核心目标:
- 逐表基于公共关联键(如通用的
num_courrier字段)扩展关联逻辑,避免一次性嵌套过多连接导致查询解析超时、内存溢出 - 后续优化检索性能时,优先给所有关联字段、常用筛选维度字段建立对应索引,降低全表扫描带来的性能损耗
- 当关联的表数量超过3张时,建议将上述全量关联逻辑封装为数据库视图,后续开展检索工作时直接查询视图即可,无需重复书写长段关联语句
内容的提问来源于stack exchange,提问作者Aro
相关产品推荐
相关产品推荐

