2016-12-05 31 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

相关问题