Я сейчас работаю над проектом, и мне нужно сделать запрос к моей БД через SQL * PLUS.
Вот что я пытаюсь сделать.Я хочу получить таблицу, в которой я получу имя и фамилию профессора с этими условиями (я должен проверить первое условие, а затем другое):
(Первый) Всеанс (скажем, 12004), профессор действительно преподавал эти два курса, INF3180 и INF2110
(Второй) В другой сессии, 32003Профессор действительно преподавал эти два курса: INF1130 и INF1110
Вот код, который создал БД:
CREATE TABLE Professor
(professorCode CHAR(5) NOT NULL,
lastName VARCHAR(10) NOT NULL,
firstName VARCHAR(10) NOT NULL,
CONSTRAINT PrimaryKeyProfessor PRIMARY KEY (professorCode)
)
;
CREATE TABLE Group
(sigle CHAR(7) NOT NULL,
noGroup INTEGER NOT NULL,
sessionCode INTEGER NOT NULL,
maxInscriptions INTEGER NOT NULL,
professorCode CHAR(5) NOT NULL,
CONSTRAINT PrimaryKeyGroup PRIMARY KEY
(sigle,noGroupe,sessionCode),
CONSTRAINT CESigleGroupeRefCours FOREIGN KEY (sigle) REFERENCES Cours,
CONSTRAINT CECodeSessionRefSession FOREIGN KEY (sessionCode) REFERENCES
Session,
CONSTRAINT CEcodeProfRefProfessor FOREIGN KEY(professorCode) REFERENCES
Professor
)
;
А вот мой текущий неработающий запрос:
SELECT DISTINCT Professor.firstName, Professor.lastName
FROM Professor, Group
WHERE Group.professorCode = Professor.professorCode
AND Group.sessionCode = 32003
AND (Group.sigle = 'INF1130' AND
Group.sigle = 'INF1110')
OR Group.sessionCode = 12004
AND (Group.sigle = 'INF3180' AND
Group.sigle = 'INF2110')
Я знаю, что есть способ объединить оба результата, но я не могу его найти.
В этом случае возможно только одно совпадение :
- Только одно совпадение с 32003: INF1130, INF1110
- Нет совпадения с 12004: INF3180, INF2110
Полученная таблица должна выглядеть следующим образом:
--------------------------
First Name Last Name
--------------------------
Denis Tremblay
Предлагаемое решение, данное Гордоном Линоффом , выглядит какочень хорошо, за исключением того, что он не возвращает мне таблицы, так как для следующего кода необходимо включить 4 курса и 2 sessionCode.Проблема здесь в том, что необходимо проверить оба условия и добавить результат.Допустим, условия для сеанса 12004 ни к чему не приводят, тогда я могу считать его NULL.Затем второе условие с сеансом 32003 дает мне одно совпадение.К этому результату следует добавить оба результата, чтобы получить таблицу, представленную поверх.
Я хочу сделать один запрос только для этого.
Спасибо МНОГО!
РЕДАКТИРОВАТЬ : переформулировано
EDIT2 : приведен пример известного совпадения
EDIT3 : дальнейшее объяснение, почему предлагаемое решение не работает