我使用的是Microsoft SQL Server 2008,我们有两个名为应用程序和注册的表。我想知道哪些应用程序未转换为注册。如下图所示。
我尝试使用NOT IN但它只适用于单列。我有2列要比较。你能告诉我最合适的方法吗?感谢。
PS。我无法更改数据库的结构,它们来自第三方供应商。
答案 0 :(得分:3)
改为使用NOT EXISTS
:
SELECT StudentID, CourseID
FROM dbo.Applications a
WHERE NOT EXISTS(
SELECT 1 FROM Enrolments e
WHERE e.StudenID = a.StudenID
AND e.CourseID = a.CourseID
)
答案 1 :(得分:3)
另一种方法,使用 except
select
StudentID,
CourseID
FROM dbo.Applications
except
select
StudentID,
CourseID
FROM dbo.Enrolments
答案 2 :(得分:2)
尝试
SELECT a.*
FROM Applications a
LEFT JOIN Enrolments e
ON e.StudentId = a.StudentId
AND e.CourseId = a.CourseId
WHERE e.StudentId IS NULL
旁注:比较类似解决方案的有趣答案here
答案 3 :(得分:1)
SELECT a.* FROM Applications a
LEFT JOIN Enrolments e
ON a.StudentID = e.StudentID AND a.CourseID = e.CourseID
WHERE e.StudentID IS NULL
答案 4 :(得分:1)
最简单的方法可能是应用程序和注册之间的左联接 - 只返回注册为空的
IE
SELECT a.*
FROM Applications a
LEFT JOIN Enrolments e ON a.StudentID = e.StudentID AND a.CourseID = e.CourseID
WHERE e.StudentID IS NULL