在此方案中加入后是否有办法避免重复记录?

时间:2017-01-24 18:02:40

标签: sql ms-access join

我有3个表,我试图加入一个在所有表格中都相同的字段,但这些表格并不是相关的。

TableA :
Account_Number | merchant_name | sale_date
123456789      | merchant 1    | 04-22-2016
123456789      | merchant 2    | 03-25-2016
123456789      | merchant 3    | 02-26-2016

TableB :
Account_Number | authorization_date | authorization_amount
123456789      | 04-22-2016         | 23
123456789      | 03-5-2016          | 55

TableC : 
Account_Number
123456789

由于这些表格没有关系相关,因此它们只有每个表格可能具有的相似列值,我对这个输出与响应中显示6条记录的方式有何不同感到困惑,对于表中的每条记录,它将为每个表中的每个值提供唯一的记录。

如果我想让每个表中显示空值的响应,这可能吗?如果我外连接表,我应该看到不存在的字段的空值,但这似乎不起作用。

也许我对外连接如何工作感到困惑,但我理解所有记录都从所有表中返回,但对于不存在的字段返回NULL。下面是我的查询和响应,它显示总共6条记录,这是准确的,但是在记录中添加其他表数据,这使得它有点混乱,难以减少重复。

查询:

SELECT A.merchant_Name, A.sale_date, B.authorization_date, B.authorization_amount, C.account_number
FROM (TableA AS A 
LEFT OUTER JOIN TableB AS B ON A.[account_number] = B.[account_number]) 
LEFT OUTER JOIN TableC AS C ON A.[account_number] = C.[account_number]
WHERE (((A.account_number)='123456789'))
ORDER BY A.sale_date, B.authorization_date;

输出:

  merchant_Name|sale_date|authorization_date|authorization_amount|acct
    merchant 3   02-26-2016    03-05-2016              55           123456789
    merchant 3   02-26-2016    04-22-2016              23           123456789
    merchant 2   03-25-2016    03-05-2016              55           123456789
    merchant 2   03-25-2016    04-22-2016              23           123456789
    merchant 1   04-22-2016    03-05-2016              55           123456789
    merchant 1   04-22-2016    04-22-2016              23           123456789

如果基于account_number存在值,则需要对所有三个字段进行响应。有类似下面的内容吗?

merchant_name | sale_date | authorization_date | authorization_amount | acct
merchant 3    | 02-26-2016|       null         |      null            | null 
merchant 2    | 03-25-2016|       null         |      null            | null
merchant 1    | 04-22-2016|       null         |      null            | null
  null        |  null     |     03-05-2016     |      55              | null
  null        |  null     |     04-22-2016     |      23              | null                  
  null        |  null     |     null           |      null            | 123456789

1 个答案:

答案 0 :(得分:1)

使用OUTER JOINS,您不会使用此查询获取任何NULL值,因为联接在帐号上,并且每个表都有匹配的记录。

您可以使用UNION ALL查询获得所需的结果,该查询获取单独查询的结果并将它们一个接一个地添加到一起。

尝试此查询:

SELECT A.merchant_Name, A.sale_date, NULL AS authorization_date,
NULL AS authorization_amount, NULL AS acct
FROM tableA A
WHERE A.account_number = '123456789'
UNION ALL
SELECT NULL, NULL, b.authorization_date, b.authorization_amount, NULL
FROM tableB B
WHERE B.account_number = '123456789'
UNION ALL
SELECT NULL NULL, NULL, NULL, C.account_number
FROM tableC C
WHERE C.account_number = '123456789';