根据另一个表

时间:2018-01-23 22:20:22

标签: database forms ms-access

提前感谢您的帮助和解释,我充其量只是一个新手,并试图自学。

我有两种不同类型的声明表,[claim_a]和[claim_b]。这些表中的每一个都捕获类似的数据,每行有一个索赔记录。我有一个类似的表格来显示每个表的记录数据。我的一个表单有一个网格,用于捕获发送的文档和发送的日期。

在第三个表[document]中,发送的文档的每个实例都与ssn,claim_num,first,last和clm_type,doc_type和date_sent相关联。

我想创建一个查询,输出为两个声明表发送的所有通信。我意识到我可以做两个单独的查询,但我认为这可以做到并且不太困难,我只是缺少一些东西,想知道什么。我尝试过各种连接类型(内部,左侧,右侧)并获得各种结果,但实际上没有任何正确的结果。使用INNER JOIN,我只有78条记录,但我期待2,261条,当我做LEFT OUTER时,我得到了3,070,总数比我在[文件]表格中的总数还多 - 我明白在LEFT中有一行的外连接匹配RIGHT表中两行的表将返回两个ROWS。 我也确定在我的第一个加入声明中使用括号,该声明基于Google搜索似乎与Access有关。我也尝试过使用where子句。

我认为问题可能是[文件]中的某些记录与索赔表中的记录不对应。我也尝试将一个索赔表加入[文件],但即使这样也没有返回预期的结果数量。

以下是我尝试过的几个连接:

  1. 内部加入一个表:我的输出缺少4个记录,共有6个记录的SSN,我无法弄清楚为什么它跳过剩下的4个。它只适用于这个SSN。我有其他SSN超过6条记录。

    SELECT documents.date, documents.doc_type, 
    FROM documents INNER JOIN claim_a ON documents.ssn = 
    claim_a.ssn WHERE (((documents.clm_type)="Life Only")) OR 
    (((documents.clm_type)<>("Health")) AND (("Life/ ADB")<>False) AND 
    (("Life")<>False));
    
  2. 我通过此次加入获得了78条记录

    SELECT documents.date, documents.doc_type, 
    FROM (documents INNER JOIN claim_a ON documents.ssn = 
    claim_a.ssn) INNER JOIN claim_b ON documents.ssn = 
    claim_b.ssn;
    
  3. 我通过此次加入获得了3070条记录

    SELECT documents.date, documents.doc_type, 
    FROM (documents LEFT OUTER JOIN claim_a ON documents.ssn = 
    claim_a.ssn) LEFT OUTER JOIN claim_b ON documents.ssn = 
    claim_b.ssn;
    
  4. 我使用此查询获得了正确的结果数,但我担心它不能与我的主表单一起显示与表,claim_b关联的表单的标题特定信息。

    SELECT documents.date, documents.doc_type, 
    FROM documents LEFT JOIN claim_a ON documents.ssn = 
    claim_a.ssn WHERE (((documents.clm_type)<>""));
    
  5. 我显然做错了什么。有人可以建议吗?

1 个答案:

答案 0 :(得分:0)

听起来您需要在两个声明表之间进行联合查询,以获取所有声明的列表。然后使用theat查询的结果来获取文档列表。

联盟查询

Select * from Documents
left join SSN_List on Documents.ssn=SSN_List.ssn

使用SSN_List之类的名称保存,然后将其加入另一个查询中的文档

{{1}}

当然,根据需要更改第二个查询,以便从Documents中获取所需的信息。

这可以在一个查询中完成,但我发现它更容易理解并使用两步法。