2015-01-27 2 views
0

Я застрял в заявлениях sql и нуждаюсь в некоторой помощи. Im новой для базы данных и доступ к 2007, поэтому я не знаю, все синтаксис прекрасно, любое руководство будет большое спасибоПроблема с пониманием базовых операторов sql

Некоторая информация

Teacher = [CourseN, Quarter,TeacherName] 
Course = [CourseN,CourseName, Nunit) 
Section = [CourseN, Quarter , DayTime, RoomN]/ Examples of DayTime: M2:00AM, 
W4:50PM, and T8:00PM. Note that DayTime is represented as a string. 
Student = [studentName, CourseN, Quarter] 

Вопрос

13. List the CourseN and Quarter of every course taught by two 
different instructors in the same quarter ordered by the CourseN in descending order. 

Таблица Учитель

CourseN Quarter TeacherName 
1 Winter 2011 Karen Reed 
1 Winter 2011 Sun  <--- cant add this one which i need to make it work 
2 Spring 2005 Salloum 
3 Spring 2005 Karen Reed 
4 Spring 2005 Salloum 
5 Winter 2011 Sun 

Дело в том, что это второе, это не позволит мне добавить повторяющийся курсN в мой d atabase стол, потому что его либо индекс, первичный ключ, или отношения, так что я не знаю, что делать, так как я не могу ввести его в моей таблице

Edit: Я удалил первую проблему, так как я решил, так что там не на много в должности

+0

Для второго, вам необходимо присоединиться к таблице курсов с вашим столом инструктора (я предполагаю, что у вас есть), получить количество преподавателей для каждого курса, а также использовать GROUP BY и HAVING найти курсы, где количество преподавателей составляет два. – BobRodes

+0

@BobRodes: Разве я не буду делать, где счет курсаN равен 2, так как он просит двух разных преподавателей, преподающих один и тот же курс? И даже если я сделаю это, я не могу вставить эту информацию в таблицу моих учителей. –

+0

Нет, вы будете делать, где учитель считается 2, так как вы говорите о двух преподавателях, преподающих один курс. У вас, вероятно, есть еще одна таблица, которая связывает учителей с курсами, и вам нужно будет использовать их. – BobRodes

ответ

2

Думаю, вам нужно что-то подобное.

Для первого запроса вам необходимо присоединиться к таблицам «Курс» и «Раздел» по номеру курса, который является ключом. Теперь, я не думаю, что вам нужно делать строковые манипуляции в dayTime, так как все, что вам нужно, это количество записей, которые будут храниться в агрегации.

Что касается второго запроса, вам нужно будет объединить таблицы «Курс» и «Учитель», опять же, конечно.

В обоих запросах должны использоваться предложения Group By и Have, так как вам требуется агрегация в обоих случаях, что обусловлено количеством учителей/еженедельных собраний.

Надеюсь, это поможет.

drop table #Teacher 
SELECT * 
into #Teacher 
FROM  
(
    select 1 as CourseN, 1 as Quarter, 'Dan' as TeacherName 
     union 
    select 1 as CourseN, 1 as Quarter, 'Alex' as TeacherName 
     union 
    select 2 as CourseN, 1 as Quarter, 'Rob' as TeacherName 
     union 
    select 3 as CourseN, 2 as Quarter, 'Jim' as TeacherName 
     union 
    select 4 as CourseN, 3 as Quarter, 'Bob' as TeacherName 
     union 
    select 4 as CourseN, 3 as Quarter, 'Alice' as TeacherName 
) a 

drop table #Course 
SELECT * 
into #Course 
FROM  
(
select 1 as CourseN, 'English' as CourseName, 1 as Nunit 
    UNION 
select 2 as CourseN, 'Algebra' as CourseName, 1 as Nunit 
    UNION 
select 3 as CourseN, 'Math' as CourseName, 1 as Nunit 
    UNION 
select 4 as CourseN, 'Science' as CourseName, 1 as Nunit 
) a 


drop table #Section 
SELECT * 
into #Section 
FROM  
(
    select 1 as CourseN, 1 as Quarter, 'M2:00AM' as DayTime , 1 as RoomN 
     UNION 
    select 1 as CourseN, 1 as Quarter, 'W2:00AM' as DayTime , 1 as RoomN 
     UNION 
    select 2 as CourseN, 1 as Quarter, 'W2:00AM' as DayTime , 1 as RoomN 
     UNION 
    select 3 as CourseN, 2 as Quarter, 'W2:00AM' as DayTime , 1 as RoomN 
     UNION 
    select 3 as CourseN, 2 as Quarter, 'T2:00AM' as DayTime , 1 as RoomN 
     UNION 
    select 4 as CourseN, 3 as Quarter, 'T2:00AM' as DayTime , 1 as RoomN 
) a 


--List the CourseN, CourseName, and Quarter which meets or met at least two times a week. 
select a.CourseN , a.CourseName , b.Quarter --, COUNT(b.CourseN) NumOfWeeklyMeetings 
from #Course a 
    inner join #Section b 
     on a.CourseN = b.CourseN 
Where 1=1 
GROUP BY a.CourseN , a.CourseName , b.Quarter 
having COUNT(b.CourseN) > 1 


--List the CourseN and Quarter of every course taught by two 
--different instructors in the same quarter ordered by the CourseN in descending order. 
SELECT a.CourseN , b.Quarter --, count(b.TeacherName) NumOfTeachers 
FROM #Course a 
    inner join #Teacher b 
     on a.CourseN = b.CourseN 
WHERE 1=1 
group by a.CourseN , b.Quarter 
having count(b.TeacherName) > 1 
+0

благодарю вас за все неприятности, я действительно уже сделал свои собственные таблицы базы данных в доступе, и я знаю, что мне нужно было что-то делать, но это все, что мне нужно, позвольте мне добавить дубликаты, и я действительно смущен тем, что все говорят о подключении Таблица учителей с таблицей курсов, я установил курсN как первичный ключ для обоих из них, но я предполагаю, что это причина, по которой он не позволит мне помещать повторяющиеся курсы курса в таблицу Учителя –

+0

Я думаю, что вам что-то не хватает. Таблица курсов - таблица 1-1 (я только догадываюсь, так как это звучит логично). Это означает, что каждый курс будет иметь одну соответствующую запись. Однако таблица Учителя - таблица 1-N, так как многие преподаватели могут преподавать один курс. Это означает, что «CourseN in Teacher table» является внешним ключом к таблице «Курс» для объединения двух. Имеет смысл? –

+0

Редактировать !! Ive сузил его, почему он дал мне эту ошибку, я не могу дублировать Quarter и courseN в таблице базы данных Учителей.Но у меня может быть дублированный курсN и разные четверти и наоборот. И я знаю, что он не отображается в информационной части вопроса, но курсN и Quarter подчеркнуты, давая нам знать, что они являются первичными ключами, поэтому теперь, когда я знаю, что мне нужно сделать, чтобы у меня были дубликаты кварталов в таблице Учителей? –

Смежные вопросы