合并包含相同字段的数据库表

时间:2014-07-31 07:51:44

标签: sql database ms-access database-design

这是对此问题的后续问题:Planning a database describing a multi-versioned product(无需阅读本文即可回答)。

总结一下,我需要定义多个表来描述同一个实体的多个版本,即打印作业日志条目。这些版本源于生产它们的不同打印机型号。问题是,所有这些不同版本将始终包含一些常见字段,例如[Copies Printed],无论打印机型号如何,以及某些型号独有的其他型号(以及表格版本)。

我在MS Access工作。

我目前正倾向于每个版本都有一个表的解决方案。让我们说为了简单起见,只有两个打印机型号,因此有两个表,每个表包含该模型生成的日志条目。在它们两者中都有一些相同的字段(相同的名称,相同的类型,相同的含义)。我必须运行的一个查询是从BOTH表中选择行(例如,选择2014年6月在任何打印机上运行的10份以上的所有条目)。

我的问题:如何编写这样的查询,以及如何定义这些表,以便DB知道我们正在谈论相同的[CopiesPrinted]字段?这两个表上的常规SELECT(让我们称之为PrinterLog1和PrinterLog2)将返回另一个表,其中将有两个不同的列,[PrinterLog1.CopiesPrinted]和[PrinterLog2.CopiesPrinted]。需要做什么才能在结果表中只有一列[CopiesPrinted],它将包含来自相应打印机日志表的数据?换句话说,如何以智能方式将这两个表合并为一个? “JOIN ... ON PL1.CP = PL2.CP”查询也无济于事,因为[PrinterLog1.CopiesPrinted]和[PrinterLog2.CopiesPrinted]的内容应该是不同的。

谢谢!

编辑1: 谢谢大家,UNION好像做了这个工作。但是,它似乎更改了某些字段的列类型。例如,它将Yes / No(在源表中)更改为Number(在结果表中),并将-1和0分别设置为true和false。有办法解决这个问题吗?

另外,我似乎无法在Web上找到Access的SQL数据类型列表。我只能找到适合Access用户的那些(是/否,货币等),而我需要的是SQL风格的类型(VARCHAR,DECIMAL等)。是否有MS Access的SQL样式类型列表?

1 个答案:

答案 0 :(得分:1)

您需要使用UNION声明。

例如:

SELECT CopiesPrinted, Blahblah FROM PrinterLog1 
UNION ALL
SELECT CopiesPrinted, Blahblah FROM PrinterLog2

更多阅读: