0

重複の可能性:
MSAccessデータベースへの参加に関連する問題

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;

このクエリを実行するたびに、1つの入力ボックスが表示され、PR.prs_PersonIdのパラメータ値を入力するように求められます。なぜこれが発生するのですか?そして解決策は何ですか?

4

2 に答える 2

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 に答える
1

あなたのクエリは本当に非常に紛らわしいです。

の人数を知りたい場合はtb_person、なぜ に参加していtb_personDepartmentますか?

適切に設計されたデータベースでは、prs_PersonId一意である必要があります。主キーであるか、一意のインデックスがあるためです。したがって、DISTINCTは余分なようです。(persons テーブルは、departments テーブルとの 1 対多の関係の多側にあると想定しています。つまり、departements テーブルは、1 人につき 1 つの部門を選択できるルックアップ テーブルとして使用されます。)

prs_PersonIdWHERE 節でa を指定すると、結果は常に or のいずれ0かになります1。人数の取得は次のように簡略化できます

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