尽管已经回答了这个请求,但我想为缺失值的情况添加一个答案,例如只为 age_grp/gender 对提供鞋码。
对于连接解决方案,您需要 MySQL 不支持的 FULL OUTER JOIN。使用 LEFT 和/或 RIGHT OUTER JOIN 来模仿这一点对于多个表来说可能会很痛苦。
这是一个使用 UNION ALL 和最终聚合的解决方案。
create table mytable as
select age_grp, gender, max(height) as height, max(weight) as weight, max(shoesize) as shoesize, max(bmi) as bmi
from
(
select age_grp, gender, height, cast(null as unsigned integer) as weight, cast(null as unsigned integer) as shoesize, cast(null as unsigned integer) as bmi from table_1
union all
select age_grp, gender, cast(null as unsigned integer) as height, weight, cast(null as unsigned integer) as shoesize, cast(null as unsigned integer) as bmi from table_2
union all
select age_grp, gender, cast(null as unsigned integer) as height, cast(null as unsigned integer) as weight, shoesize, cast(null as unsigned integer) as bmi from table_3
union all
select age_group, gender, cast(null as unsigned integer) as height, cast(null as unsigned integer) as weight, cast(null as unsigned integer) as shoesize, bmi from table_4
) x
group by age_grp, gender;
我很惊讶CAST(NULL AS INT) 会导致语法错误,顺便说一句。我不得不把它改成CAST(NULL AS UNSIGNED INTEGER)。
SQL 小提琴:http://www.sqlfiddle.com/#!2/f4fa5c/1.