SQL-запрос, объединяющий данные из двух таблиц

Вопрос: У меня есть следующий запрос, который собирает информацию из 2 таблиц (Students и Subjects) SELECT 'StudentName' As Student, 'Class' As Class, 'Subject' As Subject DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent FROM ( SELECT stu.StudentName from Students s INNER JOIN Subjects sub WHERE stu.StudentId = sub.StudentId ) hoursSpent У меня есть другая таблица, которая

Вопрос:

У меня есть следующий запрос, который собирает информацию из 2 таблиц (Students и Subjects)

SELECT ‘StudentName’ As Student, ‘Class’ As Class, ‘Subject’ As Subject DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent FROM ( SELECT stu.StudentName from Students s INNER JOIN Subjects sub WHERE stu.StudentId = sub.StudentId ) hoursSpent

У меня есть другая таблица, которая точно такая же, как таблица ” Students в макете называется OldStudents.

Моя проблема заключается в том, что я хочу объединить данные как со Students и с OldStudents и показать как один, но не знаю, как я могу это сделать.

Я пробовал это, но это не работает:

SELECT ‘StudentName’ As Student, ‘Class’ As Class, ‘Subject’ As Subject DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent SELECT( FROM ( SELECT stu.StudentName from Students s INNER JOIN Subjects sub WHERE stu.StudentId = sub.StudentId ) hoursSpent, FROM ( SELECT stu.StudentName from Students s INNER JOIN Subjects sub WHERE stu.StudentId = sub.StudentId ) hoursSpent ) Лучший ответ:

Вы можете попробовать объединить (объединить) Students и OldStudents а затем присоединить результат к остальной части вашего запроса:

WITH AllStudents AS ( SELECT * FROM Students UNION SELECT * FROM OldStudents ) SELECT ‘StudentName’ As Student, ‘Class’ As Class, ‘Subject’ As Subject DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent FROM ( SELECT stu.StudentName from AllStudents stu INNER JOIN Subjects sub WHERE stu.StudentId = sub.StudentId ) hoursSpent Ответ №1

По сути, вам нужно иметь два одинаковых запроса: по одному для каждой таблицы и использовать UNION (или UNION ALL для их объединения:

SELECT ‘StudentName’ As Student, ‘Class’ As Class, ‘Subject’ As Subject DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent FROM ( SELECT stu.StudentName from Students s INNER JOIN Subjects sub WHERE stu.StudentId = sub.StudentId ) hoursSpent UNION ALL SELECT ‘StudentName’ As Student, ‘Class’ As Class, ‘Subject’ As Subject DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent FROM ( SELECT stu.StudentName from OldStudents s INNER JOIN Subjects sub WHERE stu.StudentId = sub.StudentId ) hoursSpent

UNION сделает результаты отличными, UNION ALL не будет.

Ответ №2

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

SELECT * FROM TableA UNION SELECT * FROM TableB

Каждый оператор SELECT должен иметь одинаковое количество столбцов

Оцените статью
Добавить комментарий