Объединить данные из трех таблиц - PullRequest
1 голос
/ 05 марта 2011

У меня есть три таблицы: tbA, tbB и tbC с 2 столбцами.Я хотел бы объединить три таблицы и сгруппировать их по mID и создать форматированный вывод, подобный этому ...

mID, mAreaA, mAreaB, mAreaC


Структура таблицы TBA

mID, mAreaA


Структура таблицы tbB

mID, mAreaB


Структура таблицы tbC

mID, mAreaC


У меня есть следующие данные

Таблица TBA
1,1,83
2,3,65
4,9,30

Таблица TBB 1,6,15
3,5,40

Таблица tbC
1,0.55


Мне нужен вывод примерно такой ...

mID, mAreaA, mAreaB, mAreaC
1,1.83,6.15,0.55
2,3,65,0,0
3,0,5.40,0
4,9.30,0,0

1 Ответ

1 голос
/ 05 марта 2011

Что вам нужно сделать, так это иметь источник всех идентификаторов из каждой таблицы, поэтому вы можете 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 в пустую строку.

...