该查询要求查找其组合涵盖一个人追求pos_code的所有缺失知识/技能的课程集。考虑的课程集不包括三门以上的课程。如果 找到多个课程集,按照升序的顺序列出课程集(及其课程ID) 课程设定总费用。
以下SQL语句仅查找追求pos_code的课程。
SELECT c.c_code, c.title, c.c_level, c.description, t.ks_code, SUM(c.retail_price)
FROM course c
INNER JOIN teaches t
ON c.c_code = t.c_code
INNER JOIN requires r
ON r.ks_code = t.ks_code
WHERE r.pos_code = 1
GROUP BY c.c_code, c.title, c.c_level, c.description, t.ks_code, c.retail_price
ORDER BY c.retail_price ASC;
我现在需要找到那个人追求这个职位所需的课程。 例如,per_id = 5具有技能1,10,15,20,25,7。 我们想要的位置是pos_code = 1,这需要技能1,3,5。应该列出的唯一课程是仅教授技能3和5的课程,因为该人知道技能1.
以下是我正在尝试处理的查询的其他部分:
WITH missing_ks(ks) AS (
(SELECT ks_code
FROM requires natural join position
WHERE pos_code = 1)
MINUS
(SELECT ks_code
FROM has_skill
WHERE per_id = 5))
在上面的查询中,它只告诉我这个位置缺少这个人的技能。我如何将这两个查询组合在一起?
答案 0 :(得分:0)
如果我正确关注,我认为您需要的只是一个不存在的子查询。
尝试一下,让我知道你的想法:
SELECT c.c_code, c.title, c.c_level, c.description, t.ks_code, SUM(c.retail_price)
FROM course c
INNER JOIN teaches t
ON c.c_code = t.c_code
INNER JOIN requires r
ON r.ks_code = t.ks_code
WHERE r.pos_code = 1
AND not exists (select 1 from has_skill s
where per_id = 5
and t.ks_code = s.ks_code)
GROUP BY c.c_code, c.title, c.c_level, c.description, t.ks_code, c.retail_price
ORDER BY c.retail_price ASC;