与MS-ACCESS数据库中查询中的参数值相关的问题

时间:2012-12-20 16:38:25

标签: sql database ms-access

  

可能重复:
  Isssue Related to Join in MS Access Database

我在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的参数值 为什么会这样?什么是解决方案??

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你的查询真的很混乱。

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

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

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

SELECT Count(*) As PersonCount
FROM tb_Person
WHERE ...