Sql 在这种情况下,会否有办法避免连接后出现重复记录?
我有3个表,我试图在一个字段上连接,该字段在所有表中都是相同的,但是这些表之间没有关系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
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';