将两个数据库表合并为一个

Sil*_*ior 0 ms-access

我有一个包含两个表的数据库。每个表都有不同的结构,但它们共享很少的公共字段。

简化示例:

表1字段结构:

 Field1, Field2, Field3, Field4
Run Code Online (Sandbox Code Playgroud)

表2字段结构:

 Field1, Field4, Field3, Field5, Field6
Run Code Online (Sandbox Code Playgroud)

当然,我的数据库有更好的命名字段和更多的字段。如您所见,两个表都有 Field1(主密钥)、Field3 和 Field4。

现在我想知道是否有可能以某种方式将这两个表中的数据合并为一个,最好不要实际复制和复制数据(使用数据库关系或查询)。

第三个表应包含所有常见字段和一些其他字段(当没有可用数据或某些默认数据时为空白单元格)。

我知道从长远来看最好修改数据库结构,以便所有公共字段都存储在一个表中,所有其他字段都存储在其他关系表中,但此时我不允许对现有表进行任何更改因为我的老板担心这会导致现有系统崩溃。

有计划更新并最终将这些系统合并为一个(包括数据库重组),但在此之前我确实需要进行一些统计分析,因此我正在寻找可快速实施的解决方案。

性能对此并不重要,因为这只是一个临时解决方案,但仍然需要,因为我不想等待太长时间来检索数据,也不想对整个数据库系统造成任何显着的减速.

所以欢迎提出任何建议。

小智 5

我会使用一个视图。只需以以下形式准备一个选择:

SELECT Field1, Field2, Field3, Field4, null as Field5, null as Field6
  FROM Table1

UNION 

SELECT Field1, null, Field3, Field4, Field5, Field6
  FROM Table2;
Run Code Online (Sandbox Code Playgroud)

您可以根据需要细化选择以进行过滤或扩展。当您满意时,只需将视图定义为:

CREATE VIEW MergedTable AS 
SELECT Field1, Field2, Field3, Field4, null as Field5, null as Field6
  FROM Table1

UNION 

SELECT Field1, null, Field3, Field4, Field5, Field6
  FROM Table2;
Run Code Online (Sandbox Code Playgroud)

然后,您始终可以针对视图运行您的选择,就像它是一个表一样。

SELECT * FROM MergedTable;
Run Code Online (Sandbox Code Playgroud)