как выбрать запись из нескольких таблиц

Я был бы рад, если бы кто-нибудь мог показать мне, как я могу выбрать запись из 12 таблиц.

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

Каждая таблица имеет следующие столбцы: StudentId, RegId, AcademicYear, Term, Form, ClassScore, ExamScore, Total, Grade.

В таблице studentDetails.Students , которая содержит демографическую запись студентов, в качестве первичного ключа есть столбец StudentId .

0
nl ja de
Использование UNION возвращает что-то более близкое к тому, что я хочу, но теперь проблема заключается в том, что я должен включать фото из таблицы «Студенты» и Программа обучения из регистрационной таблицы.
добавлено автор Akaglo, источник
Это довольно элементарная задача с SQL. Что вы пробовали?
добавлено автор Matt Ball, источник
Используйте Union, это очень просто
добавлено автор Maryam Arshi, источник

2 ответы

Пример использования запроса объединения:

SELECT au_lname FROM authors
UNION ALL
SELECT lname FROM Employee
ORDER BY au_lname
1
добавлено

Есть несколько способов, которыми вы можете вернуть данные.

Вы можете использовать JOIN между таблицей students и всеми таблицами subject :

select *  -- replace this with the columns you want to return
from Students s
left join subject1 s1
    on s.studentid = s1.studentid
left join subject2 s2
    on s.studentid = s2.studentid
left join subject3 s3
    on s.studentid = s3.studentid
left join subject4 s4
    on s.studentid = s4.studentid;

See SQL Fiddle with demo

Или вы можете использовать что-то вроде следующего, которое присоединяется к таблице students с подзапросом, который использует UNION ALL между каждой таблицей subject :

select s.StudentId, S.StudentName, S.Photo,
   sb.StudentId, sb.RegId, sb.AcademicYear, 
   sb.Term, sb.Form, sb.ClassScore, sb.ExamScore, sb.Total, sb.Grade
from students s
inner join
(
    select s1.StudentId, s1.RegId, s1.AcademicYear, 
          s1.Term, s1.Form, s1.ClassScore, s1.ExamScore, s1.Total, s1.Grade, 
          'Subject1' as src
    from subject1 s1
    union all
    select s2.StudentId, s2.RegId, s2.AcademicYear, 
          s2.Term, s2.Form, s2.ClassScore, s2.ExamScore, s2.Total, s2.Grade, 
          'Subject2' as src
    from subject2 s2
    union all
    select s3.StudentId, s3.RegId, s3.AcademicYear, 
          s3.Term, s3.Form, s3.ClassScore, s3.ExamScore, s3.Total, s3.Grade, 
          'Subject3' as src
    from subject3 s3
) sb
    on s.studentid = sb.studentid

See SQL Fiddle with Demo

Если у вас есть другая таблица, к которой вы хотите присоединиться, вы будете использовать:

select s.StudentId, S.StudentName, S.Photo,
   sb.StudentId, sb.RegId, sb.AcademicYear, 
   sb.Term, sb.Form, sb.ClassScore, sb.ExamScore, sb.Total, sb.Grade,
   r.programofstudy
from students s
inner join
(
    select s1.StudentId, s1.RegId, s1.AcademicYear, 
          s1.Term, s1.Form, s1.ClassScore, s1.ExamScore, s1.Total, s1.Grade, 
          'Subject1' as src
    from subject1 s1
    union all
    select s2.StudentId, s2.RegId, s2.AcademicYear, 
          s2.Term, s2.Form, s2.ClassScore, s2.ExamScore, s2.Total, s2.Grade, 
          'Subject2' as src
    from subject2 s2
    union all
    select s3.StudentId, s3.RegId, s3.AcademicYear, 
          s3.Term, s3.Form, s3.ClassScore, s3.ExamScore, s3.Total, s3.Grade, 
          'Subject3' as src
    from subject3 s3
) sb
    on s.studentid = sb.studentid
left join Registration r
    on s.studentid = r.studentid 
    and sb.regid = r.regid
1
добавлено
@Akaglo см. Мое редактирование и демонстрацию - sqlfiddle.com/#! 3/17489/5 </а>
добавлено автор Taryn, источник
@Akaglo в вашем примере, вы должны включить в оператор select столбцы из s1. * См. Эту демонстрацию - sqlfiddle.com/#! 3/17489/7
добавлено автор Taryn, источник
@Akaglo вы добавите регистрацию left join на s.studentid = r.studentid и sb.regid = r.regid . Затем в вашем заявлении select вы добавите r.programofstudy
добавлено автор Taryn, источник
@Akaglo посмотреть мое редактирование
добавлено автор Taryn, источник
Спасибо за ваше предложение, сэр. Я пытаюсь это сделать, и я скоро дам вам отзыв.
добавлено автор Akaglo, источник
Оба ваших ответа возвращают следующие результаты:
добавлено автор Akaglo, источник
Оба ваших ответа возвращают следующие результаты: StudentId, StudentName и Photo , но я хочу, чтобы запрос возвращал AcademicYear, Term, Form, Class, Exam, Total, Grade, Rank, Roll. Я попытался использовать Union и получил все, кроме StudentId, StudentName и Photo из таблицы Students.
добавлено автор Akaglo, источник
Pls, я не совсем понимаю вас. Это то, что я сделал. выберите s.StudentId, s.StudentName, s.Photo from StudentDetails.Students s left join ProgramDetails.EnglishLanguage s1 on s.studentid = s1.studentid left join ProgramDetails.Mathematics s2 on s.studentid = s2.studentid left join ProgramDetails.IntegratedScience s3 на s.studentid = s3.studentid left join ProgramDetails.SocialStudies s4 на s.studentid = s4.studentid
добавлено автор Akaglo, источник
Большое спасибо за вашу любезную помощь. Теперь все работает хорошо, основываясь на том, что я вам просил, но я хочу добавить столбец ProgramOfStudy из таблицы регистрации, в которой также есть столбцы StudentId и RegId. Как мне это сделать, сэр?
добавлено автор Akaglo, источник
добавлено автор Akaglo, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)