2016-12-05 59 views
0

我有一個連接語句,就像這樣:訪問SQL使用在記錄必須滿足所有值

SELECT 
distinct(p.id), p.id, p.first_name as [First Name], p.last_name as [Last Name] 
FROM tbl_person as p , 
tbl_person_languages as pl 
WHERE 
pl.person_id = p.id AND 
pl.language_id in (12,14,...) 

但這返回所有記錄。我想撤回具有pl.language_id所有值的個人的獨特記錄,而不僅僅是一個或多個值。我應該注意,IN語句中的值可能有1個或更多的值

有關如何執行此操作的任何想法?我試圖改變這樣的IN語句:

WHERE 
    pl.person_id = p.id AND 
    pl.language_id =12 AND 
    pl.language_id = 14 

但這不會返回任何內容。

感謝您的幫助

回答

1

你必須group bycount

SELECT 
    p.id, p.first_name as [First Name], p.last_name as [Last Name] 
FROM tbl_person as p , 
tbl_person_languages as pl 
WHERE 
pl.person_id = p.id AND 
pl.language_id in (12,14,...) 
GROUP BY p.id, p.first_name, p.last_name 
HAVING COUNT(DISTINCT pl.language_id) = 2 -- 12 and 14 
+0

謝謝您的答覆。我試過了,但在查詢表達式'COUNT(DISTINCT pl.language_id)= 2'中出現錯誤:語法錯誤(缺少運算符)。思考? – jason

+0

也許'access'不接受'COUNT'內的'DISTINCT',嘗試沒有它。這只是一個問題,如果一個人可以有多個相同的lenguaje並改變計數結果。但是,在你的情況下可能無關緊要? –

+0

是的,當我擺脫了Distinct關鍵字,這工作得很好。這應該是有效的,因爲他們不能有多個language_id是相同的 – jason

相關問題