Как я могу заставить эти запросы работать вместе? - PullRequest
0 голосов
/ 27 апреля 2018

Запрос просит найти наборы курсов, в которых их комбинация охватывает все недостающие знания / навыки, необходимые человеку для использования pos_code. Рассматриваемые наборы курсов не будут включать более трех курсов. Если найдено несколько наборов курсов, перечислите наборы курсов (с их идентификаторами курсов) в порядке возрастания общая стоимость курсов.

Следующая инструкция 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 голосов
/ 27 апреля 2018

Если я правильно следую, думаю, все, что вам нужно, это подзапрос «не существует».

Попробуйте и дайте мне знать, что вы думаете:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...