FULL OUTER JOIN возвращает значения NULL из таблицы внешних ключей - PullRequest
0 голосов
/ 08 мая 2018

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

Я составил следующие таблицы:

  • Студент (содержитДанные учащегося)
  • Класс (содержит классы)
  • Группы (содержит группы)
  • Разделы (Содержит разделы)
  • PrimaryData (Содержит внешние ключи для всех этихТаблицы)

Вот образцы таблиц:

Ученик:

Student Table Design

Класс:

Class Table Design

Группа

Group Table Design

Секции

Section Table Design

Первичные данные:

Primary Data Table Design

И данные в этих таблицах:

Ученик:

Student Table Data

Класс:

Class Table Data

Группы:

Groups Table Data

Разделы:

Sections Table Data

PrimaryData: (пусто, потому что все эти внешние ключи выше)Таблицы!)

PrimaryData Table Data

Диаграмма базы данных:

Database Diagram

Цель состоит в том, чтобы выбрать все данные Студент , используя Номер студента * .
Я попробовал следующие запросы:

SELECT * FROM Student Full Outer Join PrimaryData ON PrimaryData.StuID=Student.StuRollNo where Student.StuRollNo='1001';
SELECT * FROM Student Join PrimaryData ON PrimaryData.StuID=Student.StuRollNo where Student.StuRollNo='1001';

Вот что он возвращает: Query Result

Выходные данные должны содержать имя группы, имя класса и имя раздела!

Я пыталсябольшинство решений, доступных в StackOverflow, относительно JOINS Но этот результат всегда был одинаковым.

Пожалуйста, помогите мне решить эту проблему!

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Таблица PrimaryData - это таблица соответствия между учащимся и секцией, классом и группой на основе вашей ERD. Как вы ожидаете данные о секциях, классах и группах для ученика без данных в primarydata?

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

insert into primarydata values (1001,'FSC1',1001,'Engg')

После добавления этой записи измените запрос и добавьте основные таблицы разделов, классов и групп, чтобы получить имена.

0 голосов
/ 08 мая 2018
SELECT * FROM Student cross Join PrimaryData ON PrimaryData.StuID=Student.StuRollNo  where Student.StuRollNo='1001';

select E.* 
FROM   Student E
       CROSS JOIN PrimaryData P
WHERE  P.StuID = E.StuRollNo  
and E.StuRollNo = '1001'

Поскольку между столбцами нет совпадений, попробуйте использовать явное соединение, такое как левое внешнее соединение.

0 голосов
/ 08 мая 2018

Я вижу, что StuRollNo - это int, но вы вводите '1001' как строку.

...