如何合并两个表中具有某些公共字段的数据

时间:2019-06-05 16:45:24

标签: sql ruby-on-rails postgresql

因此,我有两个具有相似数据的表。表A中的列与表B中的列匹配,但是具有不同的命名约定,每个表中的列在另一个表中也没有等效项,不应合并任何行,我需要一个视图(我认为)这两个表中的行,但是合并了一些列,以便表A.columnB中的数据和表B.columnF中的数据都最终出现在视图C.columnD中。视图中的列将仅在一个表中具有源,而在另一表的行中将为null。由于数据库在多个应用程序之间共享,因此我无法更改任何现有的表结构。我认为我需要在视图中使用一堆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 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

vec[7]

只需确保匹配数据类型。