Как объединить несколько таблиц, которые немного различаются по столбцам - PullRequest
4 голосов
/ 19 июля 2011

У меня есть несколько таблиц, в которых примерно 10 общих столбцов, но в некоторых таблицах есть 1-2 дополнительных столбца.

Я хотел бы объединить все эти таблицы в одну таблицу со строкой для каждой строки из каждой таблицы со значениями NULL для любых столбцов, которых не было в исходной таблице каждой конкретной строки.

Так что мои данные выглядят примерно так:

table1
id  |  colA  | colB

table2
id  |  colA  | colB  | colC

table3
id  |  colA  | colB  | colD

И я пытаюсь получить это:

allTables
id  |  colA  | colB  | colC | colD

В приведенном выше примере все строки из таблицы1 будут иметь значения NULL для colC и colD в allTables, все строки из таблицы2 будут иметь нулевые значения для colD, а все строки из таблицы3 будут иметь нулевые значения в colC.

Пара замечаний:

  • Идентификатор столбца не совпадает или никак не связан между таблицами
  • Мой пример показывает 3 таблицы, но у меня около 8-9.
  • В каждой исходной таблице существуют повторяющиеся строки, которые должны быть сохранены.

В частности, мне интересно, есть ли ответ, похожий на тот, за который проголосовал верх * здесь или что-то подобное, более обобщенное.

Ответы [ 4 ]

4 голосов
/ 19 июля 2011
SELECT
    id,
    colA,
    colB,
    NULL AS colC,
    NULL AS colD
FROM
    Table1
UNION ALL
SELECT
    id,
    colA,
    colB,
    colC,
    NULL AS colD
FROM
    Table2
UNION ALL
SELECT
    id,
    colA,
    colB,
    NULL AS colC,
    colD
FROM
    Table3

Поскольку идентификаторы не связаны, вы также можете отследить, из какой таблицы получена строка в случае дублирования между таблицами. Для этого просто укажите жестко закодированное значение с псевдонимом с другим значением в каждом из трех операторов SELECT.

3 голосов
/ 19 июля 2011

Вы можете попробовать это:

SELECT id, colA, colB, NULL AS colc, NULL AS cold
FROM table1

UNION ALL

SELECT id, colA, colB, colc, NULL AS cold
FROM table2

UNION ALL

SELECT id, colA, colB, NULL AS colc, cold
FROM table3
3 голосов
/ 19 июля 2011

Вы можете использовать UNION:

          SELECT id, colA, colB, null AS colC, null AS colD FROM table1
UNION ALL SELECT id, colA, colB,         colC, null AS colD FROM table2
UNION ALL SELECT id, colA, colB, null AS colC,         colD FROM table3;

Как обсуждалось в комментариях, вы можете изменить это значение на UNION / UNION DISTINCT, если вы хотите удалить дубликаты из разных таблиц.Спасибо комментаторам.

0 голосов
/ 19 июля 2011

Что вам нужно, это UNION:

SELECT id, colA, colB, null as colC, null as colD
FROM table1
UNION
SELECT id, colA, colB, colC, null as ColD
FROM table2
UNION
SELECT id, colA, colB, null as colC, cold
FROM table3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...