Sql 从表中删除记录,仅保留基于其他表的一组行的最大值
我有两张桌子 我只需要表1中不在表2中的行,或者只需要表2中在表1中具有最大值的行。 最后的课程表应该是这样的。 'CS-101',75 'CS-103',85 'CS-104',78 查询后CourseReg只有那些在EqualCouse中不存在的行加上在CourseReg中具有最大值的EqualCourse行。希望它能澄清我的问题,答案如下Sql 从表中删除记录,仅保留基于其他表的一组行的最大值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张桌子 我只需要表1中不在表2中的行,或者只需要表2中在表1中具有最大值的行。 最后的课程表应该是这样的。 'CS-101',75 'CS-103',85 'CS-104',78 查询后CourseReg只有那些在EqualCouse中不存在的行加上在CourseReg中具有最大值的EqualCourse行。希望它能澄清我的问题,答案如下 DELETE FROM dbo.CourseReg WHERE (SELECT COUNT(id) FRO
DELETE FROM dbo.CourseReg
WHERE (SELECT COUNT(id)
FROM dbo.EqualCourse
WHERE dbo.EqualCourse.courseCode = dbo.CourseReg.courseCode) = 0;
如果只需要表1中不在表2中的行
select * from CourseReg where coursecode not in (select coursecode from EqualCourse)
以下是您可能正在寻找的答案
SELECT C.courseCode AS courseCode, C.totalMarksobtained AS marks
FROM [CourseReg] C left join [EqualCourse] E ON C.CourseCode=E.CourseCode
WHERE E.coursecode IS NULL
UNION
SELECT coursecode, totalmarksobtained AS marks
FROM [CourseReg] RIGHT JOIN
(SELECT Max(totalmarksobtained) maxmarks
FROM [CourseReg] C inner join [EqualCourse] E ON C.CourseCode=E.CourseCode) MXMS ON MXMS.maxmarks = Coursereg.totalmarksobtained
更新:如果需要根据规则选择结果集,可以执行以下操作
WITH non_existent_courses AS
(
SELECT r.courseCode, r.totalMarksObtained
FROM CourseReg r LEFT JOIN EqualCourse e
ON r.courseCode = e.courseCode
WHERE e.courseCode IS NULL
), max_marks_course AS
(
SELECT TOP 1 r.courseCode, r.totalMarksObtained
FROM CourseReg r JOIN EqualCourse e
ON r.courseCode = e.courseCode
ORDER BY totalMarksObtained DESC
)
SELECT *
FROM non_existent_courses
UNION
SELECT *
FROM max_marks_course
输出:
| COURSECODE | TOTALMARKSOBTAINED |
|------------|--------------------|
| CS-101 | 75 |
| CS-103 | 85 |
| CS-104 | 78 |
这是演示您想从CourseReg表中实际删除行,还是只想根据您的规则从中选择结果集?您想从CourseReg表中实际删除行,还是只想根据您的规则从中选择结果集?有帮助吗?你的问题需要更多的帮助吗?我希望结果是CS-101 75、CS-103 85和CS-104 78。i、 e.不在表2中的两行加上表1Ok的[TotalMarksTained]列中具有最大值的表2中的行。只是你的问题在这一部分是含糊不清的:只有表1中那些不在表2中的行,或者只有表2中的行在表1中具有最大值。它应该是和一排。。。或者就像你在评论中加上一行的话。。。。但无论如何,请参阅更新的答案和正在工作的sqlfiddle示例。我希望这会有所帮助。在sqlfiddle上运行它会返回nothing@user3171861这将是因为您没有任何满足标准的数据。在表格中添加更多数据,你会看到一些东西。我在别处看到你的评论,并意识到你想要的答案是什么。我已经编辑了我的原始答案。如果您认为答案正确,请将其标记为答案。我希望结果为CS-101 75、CS-103 85和CS-104 78。i、 e.表2以外的两行加上表1的[TotalMarksTotained]列中具有最大值的表2行,我希望结果为CS-101 75、CS-103 85和CS-104 78。i、 e.不在表2中的两行加上在表1的[TotalMarksTained]列中具有最大值的表2中的行