我在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的参数值 为什么会这样?什么是解决方案??
答案 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
,结果将始终为0
或1
。检索人数可以简化为
SELECT Count(*) As PersonCount
FROM tb_Person
WHERE ...