合并两个表中的数据并添加源列SQL / MSAccess

时间:2017-11-10 18:51:41

标签: sql ms-access union

我正在尝试根据三个特定列(名字姓氏邮政编码)在Access中合并多个列表)并添加一列以跟踪数据的来源。我想我应该使用一些联合查询和更新查询的变体,但感觉我错过了一块。

我正在尝试做三件事。

  1. 我想要这样做,以便如果这三列中的文本匹配,查询将识别这两个记录相同。
  2. 我想要这样做,以便如果记录中的值在两个源之间不匹配,则来自一个源的记录将覆盖或优先于另一个源,除非该值为空。
  3. 我想要这样做,以便有一个额外的列列出记录来自的原始表。
  4. 我已经能够合并列表,但它仍然会产生重复。它合并所有记录而不删除或覆盖任何具有冲突数据的记录。

    这是一个可视化:

    表1(优先列表)

    FirstName|  LastName|   Pcode|                   Email
    ______________________________________________________
       Taylor|   Verrall|  V7W1B5| hello@taylorverrall.com
         Nick|     Smith|  V7G1F4|        nick@hotmail.com
    

    表2

    FirstName|  LastName|   Pcode|                   Email
    ______________________________________________________
       Taylor|   Verrall|  V7W1B5|     tbverrall@gmail.com
        Peter|     Jones|  V7Q3R2|    jones123@hotmail.com
    

    我得到的是什么:

    FirstName|  LastName|   Pcode|                   Email
    ______________________________________________________
       Taylor|   Verrall|  V7W1B5| hello@taylorverrall.com
         Nick|     Smith|  V7G1F4|        nick@hotmail.com
       Taylor|   Verrall|  V7W1B5|     tbverrall@gmail.com
        Peter|     Jones|  V7Q3R2|    jones123@hotmail.com
    

    我想要的是什么:

    FirstName|  LastName|   Pcode|                   Email|   Source
    ________________________________________________________________                   
       Taylor|   Verrall|  V7W1B5| hello@taylorverrall.com|  Table 1
         Nick|     Smith|  V7G1F4|        nick@hotmail.com|  Table 1
        Peter|     Jones|  V7Q3R2|    jones123@hotmail.com|  Table 2
    

2 个答案:

答案 0 :(得分:0)

我知道一个非常简单的解决方案......我需要像今天这样的东西。你知道你也可以选择静态值:D喜欢这个......

假设两个表上的列数相同:

更新(根据6月7日的反馈:)

SELECT * FROM
(SELECT *, "Table1" as tblName FROM Table1
UNION ALL
SELECT *, "Table2" as tblName FROM Table2
    WHERE NOT (FirstName, LastName, Pcode, Email) IN 
    (SELECT FirstName, LastName, Pcode, Email AS FLP FROM Table1)
) collection

这将产生包含所有数据的最终结果,最后是表格的名称;)

答案 1 :(得分:0)

如果Table1优先选择记录,请考虑:

SELECT *, "T1" AS Source FROM Table1
UNION SELECT *, "T2" FROM TABLE2 WHERE NOT FirstName & LastName & Pcode IN (SELECT FirstName & LastName & Pcode AS FLP FROM Table1); 

也许只使用Pcode作为标准。