Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表中删除记录,仅保留基于其他表的一组行的最大值_Sql_Sql Server_Tsql - Fatal编程技术网

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

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

我有两张桌子 我只需要表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) 
              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中的行