Sql 如何将两个表中的数据与一些公共字段合并

Sql 如何将两个表中的数据与一些公共字段合并,sql,ruby-on-rails,postgresql,Sql,Ruby On Rails,Postgresql,所以我有两个数据相似的表。表A中的列与表B中的列相匹配,但命名约定不同,每个表中的列在另一个表中也没有等效的列,不应合并任何行,我需要一个视图,我认为这两个表中的所有行,但由于合并了一些列,因此表A.columnB中的数据和表B.columnF中的数据最终都会出现在视图C.columnD中。视图中的某些列在其中一个表中只有源,而在另一个表的行中为空。我无法更改任何现有的表结构,因为数据库在多个应用程序之间共享。我想我需要在视图中使用一堆完整的外部连接语句,但是我在思考如何真正进行时遇到了困难。如

所以我有两个数据相似的表。表A中的列与表B中的列相匹配,但命名约定不同,每个表中的列在另一个表中也没有等效的列,不应合并任何行,我需要一个视图,我认为这两个表中的所有行,但由于合并了一些列,因此表A.columnB中的数据和表B.columnF中的数据最终都会出现在视图C.columnD中。视图中的某些列在其中一个表中只有源,而在另一个表的行中为空。我无法更改任何现有的表结构,因为数据库在多个应用程序之间共享。我想我需要在视图中使用一堆完整的外部连接语句,但是我在思考如何真正进行时遇到了困难。如果有人能提供一个通用的例子,说明这应该是什么样子的话,我应该可以从这里开始

下面是一个不起作用的示例,实际数据库中连接的每一侧都有更多的列,为了可读性而被截断:

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

如果我错了,请纠正我,但我认为我不能使用并集,因为每侧的列数不同

您可以执行以下操作:

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

只需确保数据类型匹配。

看起来像是工会的工作。我认为工会不会处理与另一个表中的某些内容不匹配的列。我只需将NULL转换为不匹配的列所需的任何数据类型即可?我现在要试试,理论上看起来很棒though@mrben522就这么简单。看来在PostgreSQL中NULL不需要强制转换为数据类型,所以我不需要转换。。。您的答案的一部分,但我认为对于大多数SQL变体来说,这是必要的,您肯定引导我走上了正确的道路,因此我将此答案标记为正确。