MySQL在哪里

MySQL在哪里,mysql,Mysql,我的数据库中有五个表:用户、工作、资格、工作资格和用户资格 我需要选择所有有资格执行特定工作的员工。如果有像ALL这样的语句,这将非常有用,例如查询将是 SELECT user_id FROM users_qualification WHERE qualification_id ALL IN ( SELECT qualification_id FROM job_qualifications WHERE jobs_id = 1

我的数据库中有五个表:用户、工作、资格、工作资格和用户资格

我需要选择所有有资格执行特定工作的员工。如果有像ALL这样的语句,这将非常有用,例如查询将是

SELECT user_id
FROM users_qualification
WHERE qualification_id ALL IN 
    (
        SELECT qualification_id 
        FROM job_qualifications 
        WHERE jobs_id = 1
    )

如果您知道该职位所需的资质数量,可以编写以下查询:

SELECT uq.user_id
FROM users_qualification uq JOIN job_qualifications jq
    ON uq.qualification_id = jq.qualification_id
WHERE jq.jobs_id = 1
GROUP BY uq.user_id
HAVING COUNT(*) = {# of qualifications}
要查找资格证书的数量,请运行:

SELECT COUNT(*)
FROM job_qualifications
WHERE jq.jobs_id = 1

扩展Scrum Meister的答案,您可以这样做:

SELECT
    distinct uq.user_id
FROM
    users_qualification uq
    JOIN job_qualifications jq ON uq.qualification_id = jq.qualification_id
WHERE
    jq.jobs_id = 1
GROUP
    BY uq.user_id
HAVING
    COUNT(*) = (SELECT COUNT(*) FROM job_qualifications jq2 WHERE jq2.job_id = jq.job_id)

只是想一想:为了你的目的,用另一种方式进行检查是否更有意义:选择工作资格都属于用户资格的人员?我需要确保我得到的用户具有正确的资格,而不仅仅是相同数量的资格,这还能实现吗?@bland dan Yes,
JOIN
可以解决这个简单、优雅的问题——太棒了。我已经搜索了几个小时,这在10秒内解决了我的问题。向您致敬,@TheScrumeMeister。感谢Alexs+1增强scrumeister的回答