查找缺失值,受另一个值约束

时间:2013-06-11 23:18:10

标签: ms-access ms-access-2013

我有两张桌子。表1包含唯一帐号和唯一帐户名。表2包含与Table1帐号相关的帐号,以及另一个“父”帐号。

我试图找到Table1中存在的所有帐号,但在Table2中不存在。此外,我想根据表2中的“父”帐号丢失每个丢失的帐号。

实施例。

表1

AccountNum  AccountName
1           a
2           b
3           c
4           d  

表2

ParentAccount  AccountNum  AccountName
100            1           a
100            2           b
200            1           a
200            2           b
200            4           d

我希望我的结果能够回归:

100            3           c
100            4           d
200            3           c

到目前为止,我只能弄清楚如何返回表2中根本不存在的值,但不受父帐户的限制。我会将表格分开,但我有数百个父帐户。

SELECT Table1.AccountNum, Table1.AccountName
FROM Table1 LEFT JOIN Table2 ON Table1.[AccountNum] = Table2.[AccountNum]
WHERE (((Table2.AccountNum) Is Null));

非常感谢任何帮助。我已经坚持了很长一段时间并且正在使用Access 2013。

1 个答案:

答案 0 :(得分:0)

让我们首先创建一个名为[AccountCombinations]的已保存查询,该查询为我们提供了ParentAccount和AccountNum的所有组合:

SELECT t2.ParentAccount, t1.AccountNum, t1.AccountName
FROM 
Table1 t1,
(
    SELECT DISTINCT ParentAccount FROM Table2
) t2

该查询返回

ParentAccount  AccountNum  AccountName
-------------  ----------  -----------
          100           1  a          
          200           1  a          
          100           2  b          
          200           2  b          
          100           3  c          
          200           3  c          
          100           4  d          
          200           4  d          

现在我们可以提取Table2中不存在的那些

SELECT * 
FROM AccountCombinations
WHERE NOT EXISTS
(
    SELECT * 
    FROM Table2
    WHERE AccountCombinations.ParentAccount=Table2.ParentAccount
        AND AccountCombinations.AccountNum=Table2.AccountNum
)
ORDER BY ParentAccount, AccountNum

...返回...

ParentAccount  AccountNum  AccountName
-------------  ----------  -----------
          100           3  c          
          100           4  d          
          200           3  c