Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在这种情况下,会否有办法避免连接后出现重复记录?_Sql_Ms Access_Join - Fatal编程技术网

Sql 在这种情况下,会否有办法避免连接后出现重复记录?

Sql 在这种情况下,会否有办法避免连接后出现重复记录?,sql,ms-access,join,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_Numb

我有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
如果存在基于账号的值,则需要对所有三个字段进行响应。像下面这样的事情可能吗

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

使用外部联接时,此查询不会得到任何空值,因为联接位于帐号上,并且每个表都有匹配的记录

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

请尝试以下查询:

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';