Вот как это сделать с ANSI-стандартом sql:
SELECT coalesce(g.user_id, c.user_id, j.user_id) user_id
, coalesce(g.gain_count, 0) gain_count
, coalesce(c.consume_count, 0) consume_count
, coalesce(j.join_count,0) join_count
FROM gain_table g
FULL JOIN consume_table c on c.user_id = g.user_id
FULL JOIN join_table j on j.user_id = coalsece(c.user_id, g.user_id)
Это является частью стандарта ANSI с выпуска 92, и любая крупная база данных, кроме MySql, может это делать.MySql должен сделать это вместо:
SELECT ids.user_id
, coalesce(g.gain_count, 0) gain_count
, coalesce(c.consume_count, 0) consume_count
, coalesce(j.join_count, 0) join_count
FROM (
SELECT user_id FROM gain_table
UNION
SELECT user_id FROM consume_table
UNION
SELECT user_id FROM join_table
) ids
LEFT JOIN gain_table g on g.user_id = ids.user_id
LEFT JOIN consume_table c on c.user_id = ids.user_id
LEFT JOIN join_table j on j.user_id = ids.user_id