从表中删除记录,仅保留基于其他表的一组行的最大值

时间:2014-01-08 06:49:51

标签: sql sql-server tsql

我有两张桌子 http://sqlfiddle.com/#!3/a11afc 我只想要表1中不在表2中的那些行或只需要表2中具有表1中最大值的行。 最终的CourseReg表应该如下所示。        'CS-101',75        'CS-103',85        'CS-104',78 查询后,CourseReg只有EqualCouse Plus中不存在的那些行,它们在CourseReg中具有最大值的EqualCourse行。希望它能澄清我的问题

4 个答案:

答案 0 :(得分:0)

以下......

DELETE FROM dbo.CourseReg 
       WHERE (SELECT COUNT(id) 
              FROM dbo.EqualCourse 
              WHERE dbo.EqualCourse.courseCode = dbo.CourseReg.courseCode) = 0;

http://sqlfiddle.com/#!3/a11afc/8/1

答案 1 :(得分:0)

如果您只想要表1中那些不在表2中的行

 select * from CourseReg where coursecode not in (select coursecode from EqualCourse)

答案 2 :(得分:0)

以下是您可能正在寻找的答案。

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

答案 3 :(得分:0)

更新:如果您需要根据规则选择结果集,可以

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 |

这是 SQLFiddle 演示