Как объединить данные из двух таблиц с некоторыми общими полями - PullRequest
0 голосов
/ 05 июня 2019

Итак, у меня есть две таблицы с похожими данными.В таблице A есть столбцы, которые соответствуют столбцам в таблице B, но с различными соглашениями об именах, также есть столбцы из каждого, которые не имеют эквивалента в другой таблице, строки не должны быть объединены, мне нужно представление (я думаю) со всемистроки из обеих таблиц, но с некоторыми столбцами, объединены так, что данные из таблицы A.columnB и данные из таблицы B.columnF оба попадают в представление C.columnD.В представлении будут столбцы, в которых источники есть только в одной из таблиц, а в строках другой таблицы будут нулевые.Я не могу изменить существующую структуру таблиц, поскольку база данных используется несколькими приложениями.Я думаю, что мне нужно использовать кучу FULL OUTER JOIN утверждений в представлении, но у меня возникают проблемы, когда я думаю о том, как это сделать.Если кто-нибудь может дать общий пример того, как это должно выглядеть, я могу взять его оттуда.

Вот пример того, что не работает (на каждой стороне JOIN гораздо больше столбцовв фактической БД, усеченной для удобства чтения):

SELECT
    schedule_block.id as vid,
    schedule_block.reason as vreason,
    schedule_block.when_ts as vwhen,
    schedule_block.duration as vduration,
    schedule_block.note as vnote,
    schedule_block.deleted_ts as vdeleted_when,
    schedule_block.deleted_user_id as vdeleted_user_id,
    schedule_block.lastmodified_ts as vlastmodified_ts,
    schedule_block.lastmodified_user_id as vlastmodified_user_id
FROM schedule_block
FULL OUTER JOIN appointment.appt_when as vwhen ON 1 = 1
FULL OUTER JOIN appointment.patient_id  as vpatient ON 1 = 1
FULL OUTER JOIN appointment.duration as vduration on 1 = 1
FULL OUTER JOIN appointment.deleted_when as vdeleted_when ON 1 = 1

Поправьте меня, если я ошибаюсь, но я думаю, что не могу использовать UNION, потому что на каждой стороне есть разное количество столбцов

1 Ответ

1 голос
/ 05 июня 2019

Вы можете сделать что-то вроде:

SELECT ColA, CONVERT(DATE, NULL) AS ColB
FROM T1
UNION ALL
SELECT CONVERT(VARCHAR(10), NULL) AS ColA, ColB
FROM T2

Просто убедитесь, что они соответствуют типам данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...