如何让这些查询一起工作?

时间:2018-04-27 16:06:56

标签: sql database oracle

该查询要求查找其组合涵盖一个人追求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))

在上面的查询中,它只告诉我这个位置缺少这个人的技能。我如何将这两个查询组合在一起?

1 个答案:

答案 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;