我有一个有多个连接的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
但现在这会产生语法错误(缺少运算符)。
答案 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