Что вам нужно сделать, так это иметь источник всех идентификаторов из каждой таблицы, поэтому вы можете LEFT JOIN
против него.Это обеспечит учет каждого идентификатора и то, что «пропущенные» mId
из каждой таблицы будут представлены в выходных данных как NULL mArea.
SELECT
merged.id as mID,
a.mAreaA,
b.mAreaB,
c.mAreaC
FROM
(SELECT mid as id FROM tba
UNION
SELECT mid as id FROM tbb
UNION
SELECT mid as id FROM tbc) merged
LEFT JOIN tbA a ON merged.id = a.mid
LEFT JOIN tbB b ON merged.id = b.mid
LEFT JOIN tbC c ON merged.id = c.mid
Возможно, для этого есть более подходящие способы, ноВы не объяснили, какой продукт базы данных вы используете, и схема кажется совершенно неортодоксальной.Я бы волновался, если бы тебе пришлось делать что-то подобное очень часто.Кроме того, если значение не найдено для mAreaX
, в возвращаемых значениях будет отображаться NULL.Если вам нужно, чтобы он был ненулевым, то coalesce
в пустую строку.