2015-10-17 3 views
0

У меня есть два отношения: один из них - это список областей, которые преподаватель может учить (AreasOfInstructor(InstructorNo,AreaName)), а другой - результат подзапроса, который возвращает список AreaName s , Я хочу сгруппировать отношение AreaOfInstructor на InstructorNo, а затем вернуть каждого инструктора (как представлено InstructorNo), который способен обучать все области, возвращаемые подзапросом.Выбор группировки, которая соответствует определенным критериям, SQL

Моя попытка:

SELECT InstructorNo 
FROM AreasofInstructor 
GROUP BY InstructorNo 
/**WHERE THE GROUP CONTAINS* (the list of AreaNames returned by the subquery)*/ 

Я не уверен, что фактические команды SQL является то, что будет реализовывать вещи между звездами на последней строке. Спасибо за помощь!

Редактировать: Чтобы быть ясным, я ищу набор инструкторов, которые могут преподавать в областях, которые возвращаются подзапросом.

+0

Можете ли вы перечислить здесь результаты установить, что вы ищете в качестве выхода из этой группы запросов –

+0

@MiyuruRatnayake Я хочу набор инструкторов, способные обучать возвращаемый подзапрос – Adam

ответ

1

Лучше использовать Common Table Expression более читабельны, чем подзапрос.

Проверьте, что это такое, что вы ищете?

WITH Areas (AreaName) 
AS 
(
    *sub-query goes here* 
) 
SELECT DISTINCT 
    InstructorNo 
FROM 
    AreasOfInstructor AOI 
INNER JOIN 
    Areas A ON AOI.AreaName = A.AreaName 
+0

Можно ли изменить свой ответ, чтобы он использовал GROUP BY? Я пытаюсь получить больше практики с этим оператором, поскольку я не чувствую, что я полностью его понимаю. – Adam

+0

В вашей ситуации окрености является лучшим решением ... в любом случае вы можете использовать группу, как показано ниже: с областями (AreaName) AS ( * суб-Quey здесь идет * ) ВЫБОР InstructorNo ОТ AreasOfInstructor АОИ INNER JOIN A Are A ON AOI.AreaName = A.AreaName GROUP BY InstructorNo –

2

Чтобы сделать это, вы можете присоединиться как отношения, группы по InstructorNo, а затем проверить, что отчетливая кол AreaName с в InstructorNo соответствует отчетливым кол AreaName с в AreaNames отношения.

with AreaNames as (subquery) 
select i.InstructorNo, count(distinct i.AreaName) 
    from AreasofInstructor i 
    join AreaNames n 
    on n.AreaName = i.AreaName 
group by i.InstructorNo 
having count(distinct i.AreaName) = (select count(distinct AreaName) from AreaNames) 
Смежные вопросы