用于匹配同一列中的多个值的SQL查询

pra*_*nth 15 mysql

我在MySQL中有一个表如下.

Id   Designation           Years          Employee
1    Soft.Egr            2000-2005           A
2    Soft.Egr            2000-2005           B
3    Soft.Egr            2000-2005           C
4    Sr.Soft.Egr         2005-2010           A
5    Sr.Soft.Egr         2005-2010           B
6    Pro.Mgr             2010-2012           A
Run Code Online (Sandbox Code Playgroud)

我需要让那些担任Soft.Egr和Sr.Soft.Egr以及Pro.Mgr的员工.在查询中无法使用IN或多个AND.这该怎么做??

小智 29

单程:

select Employee
from job_history
where Designation in ('Soft.Egr','Sr.Soft.Egr','Pro.Mgr')
group by Employee
having count(distinct Designation) = 3
Run Code Online (Sandbox Code Playgroud)


Luk*_*der 6

你可能真正想要的是关系分工,即使你的运动要求禁止使用AND(无论出于何种原因?).这很棘手,但可以在SQL中正确表达.

prosa中的关系划分意味着:查找在employees表中为所有现有指定创建记录的员工.或者在SQL中:

SELECT DISTINCT E1.Employee FROM Employees E1
WHERE NOT EXISTS (
    SELECT 1 FROM Employees E2
    WHERE NOT EXISTS (
        SELECT 1 FROM Employees E3
        WHERE E3.Employee = E1.Employee
        AND E3.Designation = E2.Designation
    )
)
Run Code Online (Sandbox Code Playgroud)

要查看上面的查询,请考虑此SQLFiddle

可以在此处找到解释关系划分的良好资源:http: //www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division