【问题标题】:How do I merge two tables with different column number while removing duplicates?如何在删除重复项的同时合并具有不同列号的两个表?
【发布时间】:2013-10-10 22:35:51
【问题描述】:

我在 Access 数据库中有两个表。表 1 的列比表 2 多。我想将这些表合并为一个,同时删除重复项。我有以下查询

SELECT FirstName, LastName, PhoneNumber FROM Table1
UNION
SELECT FirstName, LastName, Null as PhoneNumber  FROM Table2

问题是,我不想从 Table2 中复制任何在 Table1 中具有相同 FirstName 和 LastName 的条目。如何更改上述查询以完成此操作?提前致谢。

【问题讨论】:

    标签: sql ms-access duplicates union ms-access-2010


    【解决方案1】:

    FaddishWorm 有一个很好的概念,但是两个单独的子查询会消除任何匹配名字或匹配姓氏的记录。 NOT x AND NOT y = NOT(x OR y)。因此,像 Hernandez 和 Jim 这样的名字将从 TABLE2 中省略。

    尝试连接。

    SELECT FirstName, LastName, PhoneNumber FROM Table1
    UNION
    SELECT FirstName, LastName, Null as PhoneNumber FROM Table2 
    WHERE FirstName & Lastname NOT IN (SELECT FirstName & lastname FROM Table1);
    

    还有其他解决方案。这很慢。 HandsUp 的想法是正确的。

    【讨论】:

      【解决方案2】:

      从只返回那些在Table1 中不匹配的Table2 行的查询开始。

      SELECT t2.FirstName, t2.LastName
      FROM
          Table2 AS t2
          LEFT JOIN Table1 AS t1
          ON 
                  t2.FirstName = t1.FirstName
              AND t2.LastName = t1.LastName
      WHERE t1.FirstName Is Null;
      

      然后在您的 UNION 查询中使用该 SELECT

      SELECT FirstName, LastName, PhoneNumber FROM Table1
      UNION ALL
      SELECT t2.FirstName, t2.LastName, t2.Null AS PhoneNumber
      FROM
          Table2 AS t2
          LEFT JOIN Table1 AS t1
          ON 
                  t2.FirstName = t1.FirstName
              AND t2.LastName = t1.LastName
      WHERE t1.FirstName Is Null;
      

      注意我使用了UNION ALL,因为它需要较少的数据库引擎工作,因此速度更快。当您希望数据库引擎清除重复行时,请仅使用 UNION。但是,在这种情况下,这不是必需的......除非在这些表中的一个或两个中单独存在重复项。

      【讨论】:

        【解决方案3】:

        尝试如下约束:

        SELECT FirstName, LastName, PhoneNumber FROM Table1
        UNION
        SELECT FirstName, LastName, Null as PhoneNumber FROM Table2 
        WHERE FirstName NOT IN (SELECT FirstName FROM Table1) 
        AND LastName NOT IN (SELECT LastName FROM TABLE1);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-05
          • 2016-05-29
          • 2018-11-23
          • 2010-11-22
          相关资源
          最近更新 更多