在连接表语句中访问SQL mutliple HAVING

时间:2016-12-05 19:34:44

标签: sql ms-access access

我有一个有多个连接的SQL语句。我想对我们两个表的IN语句,如下:

ViewController

所以,我想撤回所有不同的记录,其中一个人的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 , 
    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

但现在这会产生语法错误(缺少运算符)。

2 个答案:

答案 0 :(得分:1)

属性是字符串类型还是数字类型?在IN运算符中使用IN运算符(如IN('12,'14')或类属性到CInt(),如CInt(language_id)IN(12,14)。

SELECT 
    p.id, 
    p.first_name as [First Name], 
    p.last_name as [Last Name]       
FROM  
    tbl_person as p , 
    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

答案 1 :(得分:1)

它失败了,因为您在HAVING语句中表达了笛卡尔积(连接)。尝试在查询的SELECT部分​​中包含pl.language_id,你应该明白我的意思。

正如其他人所建议的那样,您需要创建JOIN语句。

FROM  
tbl_person as p  
INNER JOIN tbl_person_languages as pl 
    ON p.id = pl.person_id_FK
INNER JOIN tbl_person_skills As ccp 
    ON p.id = ccp.person_id_FK