2012-12-20 97 views
0

可能重複:
Isssue Related to Join in MS Access Database問題在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 爲什麼會發生這種情況?什麼是解決方案?

+2

是說所有的查詢還是你在簡化呢?有更多的連接,字段,組合bys等?聽起來像它可以重建更簡單? –

+0

我不確定你想要在查詢中完成什麼。你想數數不同的人嗎?我覺得人桌上的personID應該是唯一的,除非您使用代理鍵或類型2方法來處理數據更改。即使那樣,你爲什麼加入部門?像其他人一樣,嘗試簡化查詢,也許拼寫錯誤或別名不正確。 – Scotch

回答

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

你查詢真的很混亂。

如果你想知道tb_person的人數,你爲什麼要加入tb_personDepartment

在設計良好的數據庫中,prs_PersonId必須是唯一的。無論是因爲它是主鍵還是因爲它具有唯一索引。因此DISTINCT似乎是多餘的。 (我假設人員表與部門表是一對多關係的多邊形,即:部門表被用作查找表,從中可以選擇每個人的一個部門)

如果在WHERE子句中指定prs_PersonId,結果將始終爲01。檢索人數可簡化爲

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