MS-Access 2007:查询与至少有一条符合指定条件的记录的个人相关的所有记录

时间:2016-05-02 17:16:06

标签: sql ms-access

我试图将35年的数据带入Excel的Access。清洁过程的一部分是确保我们捕获的动物使用的唯一ID对每只动物来说都是独一无二的。

要做到这一点,我想确保每个标签只有一个"第一个捕获"与之相关联。我不能只搜索重复项,因为动物经常被捕获2-5次。

现在,我已设法创建该查询,该查询使用多个capcode" 1"来提取ID代码。记录。 (关于id.type的东西是因为这对于以某种方式标记的动物很重要)

    SELECT [Capture Table].id_code, [Capture Table].capcode, 
    [Capture Table].id_type, [Capture Table].capture_id
    FROM [Capture Table]
    WHERE ((([Capture Table].id_code) In (SELECT [id_code] 
    FROM [Capture Table] As Tmp GROUP BY [id_code],[capcode] HAVING Count(*)>1  And [capcode] = [Capture Table].[capcode])) 
    AND (([Capture Table].capcode) Like "1") 
    AND (([Capture Table].id_type) Like "NP" Or ([All Info Query].id_type)="E" Or ([Capture Table].id_type)="T"))
    ORDER BY [Capture Table].id_code, [Capture Table].capcode;

现在,这给了我所有问题的标签号码。现在我想提取所有相关信息(包括与特定调查中的捕获相关的表格中的调查信息),并返回包含这些ID代码的所有记录(所以我不会改变第一次捕获和错过任何后续的重新捕获。)

这将返回记录(会话+标题+捕获查询只是将所有调查信息与相关的捕获一起提取,这就是我如何解决"模糊的外连接错误"并且仍然可以日期和网站信息):

    SELECT DISTINCTROW [Session+Header+Capture Query].Year, [Session+Header+Capture Query].site, [Session+Header+Capture Query].Date, [Session+Header+Capture Query].trappers,
     [Session+Header+Capture Query].id_type, [Capcode 1 Repeat subQuery].id_code, [Session+Header+Capture Query].age, [Session+Header+Capture Query].sex, [Session+Header+Capture Query].repro, 
     [Session+Header+Capture Query].tail_mm, [Session+Header+Capture Query].capcode
     FROM [Capcode 1 Repeat subQuery] LEFT JOIN [Session+Header+Capture Query] ON [Capcode 1 Repeat subQuery].id_code = [Session+Header+Capture Query].id_code;

因此,现在返回与"问题ID代码相关的所有记录"。但是,它也会复制它们(尽管打开了唯一的记录)并且不可更新。

长话短说,如何选择具有给定条件的重复项(capcode = 1的重复ID代码)并返回包含这些ID代码的所有记录,而不仅仅是capcode = 1的记录?虽然仍然可以更新我的查询?

看起来这样做的方法是删除子查询并将select函数放入主函数中,但我不确定如何做到这一点并将capcode标准折叠到其中。

非常感谢你的帮助!

PS。我还是只学习SQL,所以答案和代码的小解释真的很有用,否则我只是复制并粘贴,尽量不要破解。

1 个答案:

答案 0 :(得分:0)

所以,我最终搞清楚如何做到这一点。我发布在这里,以便其他人可以尝试我奇怪的hodge podge(风险自负),或者更有经验的人可以提高我对如何做到这一点的最佳猜测。

我最后单独写了两个查询。第一个做我原来的第一个,拉出所有问题ID。第二个提取与这些相关的所有记录。第二个也直接从三个相关表中提取信息,而不是从查询中提取所有内容,我之前不知道该怎么做。

无论如何,我将Query 1&通过在查询2的WHERE子句中将查询1全部放入单个查询中来查询2,因此查询2仅从查询1的结果中提取记录。每个查询"在下面的代码中缩进更多。

非常欢迎有关如何改善这一点的建议。

    SELECT [Capture Table].*, [Session Table].Year, [Session Table].site, [Session Table].begin_date, [Session Table].end_date, [Header (Survey) Table].Date, [Header (Survey) Table].trappers
    FROM [Session Table] INNER JOIN ([Header (Survey) Table] INNER JOIN [Capture Table] ON [Header (Survey) Table].survey_id = [Capture Table].survey_id) ON [Session Table].session_ID = [Header (Survey) Table].session_id
    WHERE ((([Capture Table].id_code) In 
        (SELECT [Capture Table].[id_code]
         FROM [Capture Table]
         WHERE ((([Capture Table].id_code) In 
            (SELECT [id_code] 
             FROM [Capture Table] As Tmp GROUP BY [id_code],[capcode] 
             HAVING Count(*)>1  And [capcode] = [Capture Table].[capcode])) AND (([Capture Table].capcode) Like "1") AND (([Capture Table].id_type) Like "NP" Or ([Capture Table].id_type)="E" Or ([Capture Table].id_type)="T")))));