SQL查询两个表中的
我有以下查询其收集从2个表(Students
和Subjects
)SQL查询两个表中的
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)
你可以尝试合并(unioning)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
真棒整齐干净正是我正在寻找。谢谢! – NoviceMe 2013-02-21 22:16:00
如果你只想一组数据添加到其他使用UNION操作:
SELECT * FROM TableA
UNION
SELECT * FROM TableB
每个SELECT语句必须有相同的列数
OOPS!我正是这个意思。感谢Jeff抓住我的漏洞 - 我纠正了我的答案。脸红。 – Melanie 2013-02-21 22:01:09
但是使用联合将不会使这些事情复杂化,因为这两个表都使用联接?这是最好的方法吗? – NoviceMe 2013-02-21 22:01:40
@NoviceMe这只是'UNION'的一个普遍的例子。看看其他两个答案,因为他们有解决方案。一个将学生和老学生联合在一起,然后加入到学科,另一个加入学生和科目,然后加入老学生和科目,然后联合他们。 – techturtle 2013-02-21 22:05:52
本质上,您需要有两个相同的查询,每个表使用一个并使用UNION
(或UNION ALL
来conc atenate他们:
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
不会。
如果老学生永远不是现在的学生,UNION ALL就足够了。 – RandomUs1r 2013-02-21 22:04:08
@ Syn123 - 你的意思是'联合'。 – Oded 2013-02-21 22:04:33
@Oded - 这是这种情况下最好的方法吗? – NoviceMe 2013-02-21 22:04:46
你是什么意思的“结合”吗?结果集与这两个表相关的结果是什么? – Oded 2013-02-21 21:57:08
@Oded - 那么现在结果显示如下:StudentName,Class,Subject和HoursSpent。同样的,它会先从OldStudents中获取这些值,然后再将它们填充到一张表中。 – NoviceMe 2013-02-21 21:58:57