1

我有一个表 emp_skills,其中 emp_id 和 Skill_id 作为两列。现在,

SELECT * FROM emp_skills where skill_id REGEXP '^[2,3]$' 

输出具有 2 或 3 或两者兼有的人的 emp_id。我想要的是那些同时具有 2 和 3 作为其 Skill_id 的 emp_id。Skill_id 是整数

上述查询的示例输出

EMP_ID     SKILL_ID
401        2   
405        2
401        3
405        3
407        3

现在我想要的只是前四行,因为 407 没有 2 作为 Skill_id

4

2 回答 2

3

从你的短语来看both 2 and 3 as their skill_id,我认为你不需要regex这个。您只需要count,group byhaving

SELECT EMP_ID
FROM emp_skills
WHERE skill_ID IN (2,3)     
GROUP BY EMP_ID
HAVING COUNT(EMP_ID) = 2    -- the total number of skill_ID

where您需要将记录数与子句中提供的 id 总数相匹配。

SQLFiddle 演示

于 2012-09-11T07:23:55.243 回答
0

假设skill_idINTEGER列,那么这可以通过使用IN子句轻松实现:

SELECT * 
FROM emp_skills 
WHERE skill_id IN(2,3);
于 2012-09-11T07:22:42.820 回答