从两列中查找SQL中的唯一ID
查询我必须获取教师和学生ID从两列中查找SQL中的唯一ID,sql,sql-server,tsql,Sql,Sql Server,Tsql,查询我必须获取教师和学生ID Select lk.teacherID,lk.studentID from Teacher a inner join student b on a.classkey = b.classkey Teacher ID Student ID 123 678 123 876 123 987 456 459 456 789 我期待的最终结果:- 从两列中查找
Select lk.teacherID,lk.studentID from Teacher a inner join student b
on a.classkey = b.classkey
Teacher ID Student ID
123 678
123 876
123 987
456 459
456 789
我期待的最终结果:-
从两列中查找SQL中的唯一ID
Unique IDs
123
678
876
987
456
459
789
这是你想要的吗
select t.teacherId
from teachers t
union
select s.studentId
from students s;
编辑:
对于澄清,只需使用交叉应用
:
Select distinct id
from Teacher t inner join
student s
on t.classkey = s.classkey cross apply
(values (t.teacherId), (s.studentId)) v(id);
无需对数据进行多次传递 如果对象_ID('tempdb...#temp','U')不为空 升降台#温度 嗯,,
Jason不,我有上面的查询,先找到那些结果,现在从结果集中出来。我要的是上面提到的最终结果above@LearnAspNet . . . 我不知道你到底是什么意思。谢谢你的澄清。我不喜欢交叉应用连接,什么是最好的方式。有人补充的其他答案是有效的,但我认为这可能是性能问题@Gordon@LearnAspNet . . . 无论您是否喜欢交叉应用,横向连接都是SQL的重要组成部分,这应该是性能最好的方法。
Select lk.teacherID as UniqueIDs
From(
Select lk.teacherID,lk.studentID from Teacher a inner join student b
on a.classkey = b.classkey)a
GROUP By teacherID
Union all
Select lk.studentID as UniqueIDs From(
Select lk.teacherID,lk.studentID from Teacher a inner join student b
on a.classkey = b.classkey)a
GROUP By studentID
CREATE TABLE #temp (
Teacher_ID int NOT NULL,
Student_ID INT NOT NULL
);
INSERT #temp (Teacher_ID, Student_ID) VALUES
(123, 678),
(123, 876),
(123, 987),
(456, 459),
(456, 789);
--======================================
SELECT DISTINCT
UniqueID = x.ID
FROM
#temp t
CROSS APPLY ( VALUES (t.Teacher_ID), (t.Student_ID) ) x (ID);