0

可能重复:
与加入 MS Access 数据库相关的问题

我在 MS-Access 数据库文件中有一个数据库文件..

我有以下查询:

SELECT 
    (select count (*)
     from (select distinct prs_PersonId
           from tb_person
           where prs_personId = PR.prs_personId)) 
FROM tb_Person PR left outer join tb_personDepartment PD
        on PR.prs_PersonId = PD.pd_personId;

每当我执行此查询时,我都会得到一个输入框,它要求输入 PR.prs_PersonId 的参数值为什么会发生这种情况?解决方案是什么?

4

2 回答 2

1

你的查询真的很混乱。

如果你想知道人数tb_person,你为什么要加入tb_personDepartment

在设计良好的数据库中,prs_PersonId必须是唯一的。要么是因为它是主键,要么是因为它具有唯一索引。因此,DISTINCT似乎是多余的。(我假设persons表与departments表是一对多关系的多方面。即:departements表用作查找表,您可以从中为每个人选择一个部门。)

如果您prs_PersonId在 WHERE 子句中指定 a ,则结果将始终为01。检索人数可以简化为

SELECT Count(*) As PersonCount
FROM tb_Person
WHERE ...
于 2012-12-20T17:34:10.917 回答
1

如果我没记错的话,Access 不能在子查询中使用子查询外部的值,所以:

SELECT 
    (select count (*) 
     from (
         select distinct prs_PersonId 
         from tb_person 
         where tb_person.prs_personId = 
            /* PR.prs_personId   is not valid here  */
            /* use a constant like */  1  /* just to test that this is the "missing" parametrer. Of course, it won't give correct results, but will run */
         )
     )  As ACount
from tb_Person PR 
left outer join tb_personDepartment PD
on PR.prs_PersonId = PD.pd_personId

然后重新制定查询,可能类似于:

SELECT prs_PersonId, count(*) As ACount
FROM tb_person 
GROUP BY prs_PersonId
于 2012-12-20T17:08:23.260 回答