Вопрос:
У меня есть следующий запрос, который собирает информацию из 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 должен иметь одинаковое количество столбцов