J'essaie de faire une base de données. Il a suivi un sous-ensemble de tables
Ma requête doit être: trouvez les candidats qui ont des compétences requises par un identifiant d'emplois donné p>
J'ai fait quelque chose comme ça à l'aide d'une série de sous-requêtes p> Mais ici si j'ai un travail qui nécessite des compétences, dit A, B, C et j'ai un candidat qui possède une compétence une compétence que cela retournera également ce candidat également. Existe-t-il un moyen de trouver un candidat qui a toutes les compétences A, B, C et ne pas renvoyer les candidats à un seul sous-ensemble de compétences requises p> p>
3 Réponses :
Utiliser rejoindre code> plutôt que dans code>. Ensuite, vous pouvez vous joindre à une sous-requête qui compte le nombre de compétences requis et comparer cela avec le nombre de compétences que le demandeur a en commun. SELECT as.applicant_id
FROM applicant_skill AS as
JOIN jobs_and_skills AS js ON js.skill_id = as.skill_id
JOIN jobs AS j ON j.job_id = js.job_id
JOIN (
SELECT job_id, COUNT(*) AS skill_count
GROUP BY job_id
) AS jsc ON j.job_id = jsc.job_id
WHERE j.description = "research"
GROUP BY as.applicant_id
HAVING COUNT(*) = jsc.skill_count
Vous pouvez préparer sous-requête code> pour homologiciels_and_skill avant de vous joindre à candidats code>. select * from applicant_skill t1
inner join
(select t2.skill_id from
jobs_and_skill t2
inner join skills t3 on t3.skill_id = t2.skill_id
inner join jobs t4 on t4.job_id = t2.job_id
where t4.description = 'research') as t
on t1.skill_id = t.skill_id
Vous pouvez rejoindre emplois code> et candidats code> avec une condition qui garantit que le demandeur a toutes les compétences professionnelles. select
j.*,
a.*
from
jobs j
inner join applicants a on not exists (
select 1
from job_and_skills js
left join applicant_skills as
on as.applicant_id = a.applicant_id
and as.skill_id = js.skill_id
where
js.job_id = j.job_id
and as.applicant_id is null
)
where j.description = 'research'
Si la deuxième colonne de
candidate_skill code> êtreskill_id code> au lieu decompétences code>?De plus, vous n'avez pas une table séparée pour
demandeurs code>, comme(candidat_id, nom, ...) code>?@Gmb en effet, j'ai une table séparée pour les candidatures et aussi candidat_skill devrait avoir des compétences_id comme une deuxième colonne