我有一个具有多个连接的SQL语句。我想我们的IN语句两个表,就像这样:在连接的表语句中访问SQL多重HAVING
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 ,
tbl_person_skills As ccp
WHERE
pl.language_id in (12,14) AND
ccp.skill_id in (55)
GROUP BY
p.id, p.first_name , p.last_name
HAVING
count(pl.language_id) = 2 and count(ccp.skill_id) =1
所以,我想拉回来所有的,独特的记录,其中一人有language_ids等于12和14,并有skill_id也= 1但是,这会返回一个空集。我已经确认数据至少存在一条记录,所以我应该看到一些东西。
我应该注意到,会有更多连接,并且language_ids和skill_ids值可能会改变。这与我询问的前一个问题(Access SQL using IN where record must satisfy all values)类似,但是这是与多个连接的表格。 感谢
编辑
我已经更新为使用SQL连接,因为这样的:
SELECT
p.id,
p.first_name as [First Name],
p.last_name as [Last Name]
FROM
((tbl_person as p
INNER JOIN tbl_person_languages as pl
ON p.id = pl.person_id)
INNER JOIN tbl_person_crossCuttingSkills As ccp
ON p.id = ccp.person_id)
WHERE
pl.language_id in (12,14) AND
ccp.skill_id in (55)
GROUP BY
p.id,
p.first_name,
p.last_name
HAVING
count(pl.language_id) = 2 AND
count(ccp.skill_id) =1
但这现在创建一个语法错误(缺少操作员)。
我的猜测是,由于缺少连接导致'HAVING'子句失败,因此它是空的。我认为它会计算表中的所有pl.language_id,并且只有在知道该语言的两个人时才返回language_ids。此外,由于没有加入,你会得到重复/错误。在我们能够进一步得到之前,你需要确保你加入你的桌子。另外,如果仅出于可读性的原因,我建议使用ANSI sql与您的连接使用'ON'关键字而不是'WHERE'。 http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause – MoondogsMaDawg