【发布时间】:2019-11-18 18:49:57
【问题描述】:
我有一张桌子"MARK_TABLE",如下所示。
如何删除具有相同"STUDENT"、"COURSE" 和"SCORE" 值的行?
| ID | STUDENT | COURSE | SCORE |
|----|---------|--------|-------|
| 1 | 1 | 1 | 60 |
| 3 | 1 | 2 | 81 |
| 4 | 1 | 3 | 81 |
| 9 | 2 | 1 | 80 |
| 10 | 1 | 1 | 60 |
| 11 | 2 | 1 | 80 |
现在我已经过滤了我想要保留的数据,但没有 "ID"...
SELECT student, course, score FROM mark_table
INTERSECT
SELECT student, course, score FROM mark_table
输出:
| STUDENT | COURSE | SCORE |
|---------|--------|-------|
| 1 | 1 | 60 |
| 1 | 2 | 81 |
| 1 | 3 | 81 |
| 2 | 1 | 80 |
【问题讨论】:
-
一种简单的方法是选择要保留到临时表中的数据,清除源表,然后将临时表数据重新插入到源表中。
-
但是我不知道如何选择带有
"ID"的数据。一旦我选择了"ID',结果就不同了。这不是我想要的。 -
SELECT STUDENT, COURSE, SCORE, MAX(ID) FROM MARK_TABLE GROUP BY STUDENT, COURSE, SCORE这样做怎么样? -
这次成功了。现在我需要弄清楚如何删除不在此输出中的行...
-
Tejash's Answer 做到了这一点。
标签: sql oracle duplicates sql-delete