Sergey2121 Ответов: 3

У меня есть 4 стола, и я пытаюсь присоединиться к ним. Это пока не работает.


Привет сообществу.

У меня есть 4 стола, и я пытаюсь присоединиться к ним. это пока не работает. Мне нужно присоединиться, чтобы пользователь мог получить фамилию и имя инженера, фамилию и адрес электронной почты преподавателя, а также тему и название классов для каждого зачисления на курс.

Создание таблицы инженеров(
ИД НОМЕР,
Фамилия varchar2(50),
Имя пользователя varchar2(50),
Электронная почта varchar2(50),
Дата окончания учебы,
ПЕРВИЧНЫЙ КЛЮЧ(ИД)
);

Создать таблицу факультетов(
ФИД КОЛИЧЕСТВО,
Фамилия varchar2(50),
Имя пользователя varchar2(50),
Электронная почта varchar2(50),
Дата дата приема на работу ,
ПЕРВИЧНЫЙ КЛЮЧ(FID)
);


Создание классов таблиц(
УУР КОЛИЧЕСТВО,
Тема varchar2(50),
Catalognbr varchar2(50),
Название varchar2(50),
ПЕРВИЧНЫЙ КЛЮЧ(CID)
);

Создание таблицы ClassEnrollments(
Номер Энид первичный ключ,
ИД НОМЕР НЕ НУЛЕВОЙ,
НОМЕР FID НЕ НУЛЕВОЙ,
НОМЕР CID НЕ НУЛЕВОЙ,
Ограничение fk_engineers
ВНЕШНИЙ КЛЮЧ (ИД)
Ссылки инженеров(EID) на удаление каскада,
Ограничение fk_faculty
ВНЕШНИЙ КЛЮЧ (FID)
Список литературы факультет(FID) по удалению каскада,
Ограничение fk_classes
ВНЕШНИЙ КЛЮЧ (CID)
Ссылки на классы(CID) при удалении каскада
);
и это тот самый вопрос, который мне пришел в голову:

Что я уже пробовал:

ВЫБИРАТЬ
Энид,
Инженер.Фамилия как фамилия,
Инженер.Имя как имя,

Факультет.Фамилия как Flastname,
Факультет.Написать как написать,
Занятия.Субъект как субъект,
Занятия.Титул как титул,
ОТ
ClassEnrollments
Внутреннее соединение инженера с инженером.EID = ClassEnrollments.ИДЫ
Внутренний вступительный факультет на инженерном факультете.FID = ClassEnrollments.КЛИН
Внутреннее соединение классов по инженеру.CID = ClassEnrollments.СИД;

OriginalGriff

И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Что вы пытались исправить?
Где ты застрял?
Какая помощь вам нужна?

Gerry Schmitz

Соедините их "по двое" за раз: (((А + В) + С) + Г)

Sergey2121

Я пытался сделать JOIN, но это совсем не работает, я думаю, что, возможно, делаю что-то не так. Может быть, я использую неправильную схему соединения или что-то в этом роде? Я следовал учебникам, но не могу понять несколько(более 2) соединений таблиц.

Gerry Schmitz

просто присоединиться ... в конце концов у вас будут только "инженеры с записями во всех четырех таблицах.

Внутреннее и внешнее будут создавать нули здесь и там, когда записи "отсутствуют".

3 Ответов

Рейтинг:
2

OriginalGriff

Когда вы сталкиваетесь с подобной проблемой, начните с исключения возможных вариантов.
Закомментируйте большую часть запроса и посмотрите, что вы получите:

SELECT
EnID
--,Engineer.Lastname AS Lastname
--,Engineer.Firstname AS Firstname
--,Faculty.Lastname AS Flastname
--,Faculty.Email AS email
--,Classes.Subject AS Subject
--,Classes.Title AS Title
FROM
ClassEnrollments
--INNER JOIN Engineer ON Engineer.EID = ClassEnrollments.EID
--INNER JOIN Faculty ON Engineer.FID = ClassEnrollments.FID
--INNER JOIN Classes ON Engineer.CID = ClassEnrollments.CID;
Если это создает записи, добавьте немного назад:
SELECT
EnID
,Engineer.Lastname AS Lastname
,Engineer.Firstname AS Firstname
--,Faculty.Lastname AS Flastname
--,Faculty.Email AS email
--,Classes.Subject AS Subject
--,Classes.Title AS Title
FROM
ClassEnrollments
INNER JOIN Engineer ON Engineer.EID = ClassEnrollments.EID
--INNER JOIN Faculty ON Engineer.FID = ClassEnrollments.FID
--INNER JOIN Classes ON Engineer.CID = ClassEnrollments.CID;
И посмотрите, что это даст. Если все это выглядит хорошо, добавьте еще немного:
SELECT
EnID
,Engineer.Lastname AS Lastname
,Engineer.Firstname AS Firstname
,Faculty.Lastname AS Flastname
,Faculty.Email AS email
--,Classes.Subject AS Subject
--,Classes.Title AS Title
FROM
ClassEnrollments
INNER JOIN Engineer ON Engineer.EID = ClassEnrollments.EID
INNER JOIN Faculty ON Engineer.FID = ClassEnrollments.FID
--INNER JOIN Classes ON Engineer.CID = ClassEnrollments.CID;

И так далее. Когда это не удается, внимательно посмотрите на данные, которые вы только что добавили, и посмотрите, есть ли что-то очевидное.


Рейтинг:
2

Gerry Schmitz

Убедитесь, что в каждой таблице есть запись для каждого инженера.


Рейтинг:
0

Salman622

Я думаю, что проблема заключается в ваших условиях присоединения
вы снова и снова ссылаетесь на engineer.column с вашим classenrollment.column

попробуйте выполнить следующий запрос:

SELECT
EnID,
Engineer.Lastname AS Lastname,
Engineer.Firstname AS Firstname,

Faculty.Lastname AS Flastname,
Faculty.Email AS email,
Classes.Subject AS Subject,
Classes.Title AS Title,
FROM
ClassEnrollments
INNER JOIN Engineer ON Engineer.EID = ClassEnrollments.EID
INNER JOIN Faculty ON Faculty.FID = ClassEnrollments.FID
INNER JOIN Classes ON Classes.CID = ClassEnrollments.CID;