MySQL数据库的正则表达式

时间:2012-09-11 07:18:42

标签: mysql sql

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

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

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

上述查询的输出示例

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

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

2 个答案:

答案 0 :(得分:3)

来自您的短语both 2 and 3 as their skill_id,我认为您不需要regex。您所需要的只是countgroup 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 Demo

答案 1 :(得分:0)

假设skill_idINTEGER列,则可以使用IN子句轻松实现此目的:

SELECT * 
FROM emp_skills 
WHERE skill_id IN(2,3);