5

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

我需要选择所有有资格执行特定工作的员工。如果有诸如 ALL IN 之类的语句会很有用,例如查询将是

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

2 回答 2

6

如果您知道该工作所需的资格数量,则可以编写以下查询:

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
于 2012-06-10T19:27:13.687 回答
2

扩展 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)
于 2012-06-10T19:31:32.447 回答