如何连接两个或多个具有所有不同值的表和结果集

时间:2009-11-09 21:22:39

标签: excel ms-access data-migration

我有大约20个包含数据的excel文件。所有表都有相同的列,如id名称年龄位置等.....每个文件都有不同的数据,但我不知道一个文件中的数据是否再次在另一个文件中重复。所以我想加入所有文件,结果st应该包含不同的值。请尽快帮我解决这个问题。我希望结果集存储在访问数据库中。

5 个答案:

答案 0 :(得分:1)

我建议您在附件中链接图纸,或者将图纸作为表格导入。

然后从那里尝试确定使用DISTINCT从表格/表格中选择所需的密钥,并仅根据需要选择记录。

答案 1 :(得分:0)

在SQL中,您可以使用JOIN或NATURAL JOIN来连接表。我会查看NATURAL JOIN,因为你说所有的表都有相同的值。

之后,您可以使用DISTINCT获取不同的值。

我不确定这是否是您正在寻找的内容:您的问题询问有关excel但是您已使用SQL对其进行了标记。

答案 2 :(得分:0)

如果您可以在一个查询中使用所有表,则可以使用union来获取不同的行:

select id, name, age, location from Table1
union
select id, name, age, location from Table2
union
select id, name, age, location from Table3
union
...

您可以直接从结果中插入记录:

insert into ResultTable
select id, name, age, location from Table1
union
....

如果您一次只能从一个表中进行选择,则可以跳过表中已有的行的插入:

insert into ResultTable
select t.id, t.name, t.age, t.location from Table1 as t
left join ResultTable as r on r.id = t.id
where r.id is null

(假设id是标识记录的唯一字段。)

答案 3 :(得分:0)

您想要的唯一数据集似乎是:

SELECT T1.name, T1.loc
  FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls;
       ].[Sheet1$] AS T1
UNION 
SELECT T1.name, T1.loc
  FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls;
       ].[Sheet1$] AS T1

...但是你想随意将一个整数序列应用为id(而不是使用Excel表格中的id值)。

由于Access数据库引擎不支持公用表表达式而Excel不支持VIEW,因此您必须将UNION查询重复为派生表(希望优化程序能够识别重复吗?)例如使用相关子查询来获取行号:

SELECT (
        SELECT COUNT(*) + 1
          FROM (
                SELECT T1.name, T1.loc
                  FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls;
                       ].[Sheet1$] AS T1
                UNION 
                SELECT T1.name, T1.loc
                  FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls;
                       ].[Sheet1$] AS T1
               ) AS DT1
         WHERE DT1.name < DT2.name
       ) AS id, 
       DT2.name, DT2.loc
  FROM (
        SELECT T2.name, T2.loc
          FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls;
               ].[Sheet1$] AS T2
        UNION 
        SELECT T2.name, T2.loc
          FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls;
               ].[Sheet1$] AS T2
       ) AS DT2;

注意:

  

我希望将结果集存储在   访问数据库

然后,您可能应该将Excel数据迁移到Access数据库中的临时表中,并从那里进行数据清理。至少你可以将派生表放入VIEW:)

答案 4 :(得分:0)

Join是通过匹配相应列中的值来组合两个表。结果,您将获得一个合并表,其中包含第一个表,以及从第二个表复制的匹配行。您可以使用DIGBD加载项用于excel