好的,所以我被卡住了。显然,我缺少边缘情况......如果申请人拥有除技能表技能之外的更多技能,则不会返回该人。这是确切的情况和我目前的解决方案。请帮助我理解我错过的或我出错的地方,因为我无法理解,因为我觉得我的确是正确的。
状况:
假设有两个表:申请人(姓名,技能)和技能(技能) 一个申请人可能有多种技能。创建一个SQL查询报告: 谁拥有技能表中列出的所有技能只需提交SQL 声明
我痴迷的解决方案:
SELECT name
FROM applicant
HAVING Count(skill) = (SELECT Count(skill) FROM skills)
GROUP BY(name);
答案 0 :(得分:0)
你非常接近:
SELECT name
FROM applicant
GROUP BY name
HAVING Count(skill) = (SELECT Count(skill) FROM skills);
如果可能有重复项,您可以这样做:
SELECT name
FROM applicant
GROUP BY name
HAVING Count(DISTINCT skill) = (SELECT Count(skill) FROM skills);
答案 1 :(得分:0)
因此,问题是申请人可能具有未在SKILLS表中列出的技能。那很糟糕; SKILLS表中的技能应该是主键,应该限制APPLICANT表中的技能 - 外键 - 所以它们不能是SKILLS表中存在的任何东西。
根据情况,除了Gordon已经修复的语法错误之外,还有其他两个逻辑问题(除了重复技能之外,Gordon指出)。申请人可能拥有的技能超过了SKILLS表中列出的技能。他们也可能拥有与该表中相同数量的技能,但他们可能会错过一两个 - 而是拥有一个或两个UNLISTED技能。
因此,在计算之前,您需要将APPLICANT表中的技能限制为SKILLS表中存在的技能。
select name
from applicant
where skill in (select skill from skills)
group by name
having count(distinct skill) = (select count(skill) from skills)