Как создать представление для этого?

89
8

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


TableA


ID  Student1 Student2 Student1_Class Student2_Class
1 S0001 S0002 A A
2 S0001 S0003 B A

TableB


  Class StudentID StudentName
A S0001 Jack
A S0002 Adam
A S0003 Lily
B S0001 Simpson

Я ожидаю получить результат, похожий на


   ID  Student1  Name1  Student2  Name2  Student1_Class Student2_Class
1 S0001 Jack S0002 Adam A A
2 S0001 Simpson S0003 Lily B A

Как создать представление на основе этих двух таблиц, чтобы получить желаемый результат?

спросил(а) 2021-01-19T13:01:35+03:00 6 месяцев, 2 недели назад
1
Решение
90

Вы должны ПРИСОЕДИНЯТЬСЯ к классу и STUDENT, потому что S0001 повторяется.


Однако ваш результат неправильный, потому что для ID = 2 в таблице A нет совпадения A/S0001 для получения "Симпсона". Предположим, что это опечатка, здесь вы g0

CREATE VIEW MyView
AS
SELECT
A.ID,
A.Student1,
B1.StudentName as Name1,
A.Student2,
B2.StudentName as Name2,
A.Student1_Class,
A.Student2_Class
from
TableA as A
INNER JOIN
TableB as B1 ON A.Student1_Class = B1.Class AND A.StudentID = B1.Student2
INNER JOIN
TableB as B2 ON A.Student2_Class = B2.Class AND A.StudentID = B2.Student1

ответил(а) 2021-01-19T13:01:35+03:00 6 месяцев, 2 недели назад
90

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

CREATE VIEW MyView
AS
SELECT
A.ID,
A.Student1,
B1.StudentName as Name1,
A.Student2,
B2.StudentName as Name2,
B1.Class as Student1_Class,
B2.Class as Student2_Class
from
TableA as A
INNER JOIN TableB as B1 on B1.StudentID = A.Student1 and B1.Class = TableA.Student1_Class
INNER JOIN TableB as B2 on B2.StudentID = A.Student2 and B2.Class = TableA.Student2_Class

ответил(а) 2021-01-19T13:01:35+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема